Счупен ли е jsonToRepJson?

Тъкмо започвам да правя някои неща на Yesod + Haskell. jsonToRepJson повреден ли е или нещо подобно?

Направих този код по-долу, но винаги получавам грешка в частта jsonToRepJson. Изглежда, че не получава очаквания тип?

Всяка помощ би била чудесна! Благодаря :3

{-# LANGUAGE TemplateHaskell #-}
{-# LANGUAGE QuasiQuotes #-}
{-# LANGUAGE TypeFamilies #-}
{-# LANGUAGE MultiParamTypeClasses #-}
{-# LANGUAGE OverloadedStrings #-}
import Yesod
import Data.Text

data APP = APP

instance Yesod APP

mkYesod "APP" [parseRoutes|
    / TestR GET
|]

getTestR :: Handler RepJson
getTestR = jsonToRepJson $ object ["test".= ("test"::Text)]
main::IO()
main = warpDebug 3001 APP

това е, което получавам, когато използвам runhaskell

api.hs:18:12:
    Couldn't match expected type `RepJson' with actual type `Value'
    Expected type: Handler RepJson
      Actual type: HandlerT APP IO Value
    In the expression:
      jsonToRepJson $ object ["test" .= ("test" :: Text)]
    In an equation for `getTestR':
        getTestR = jsonToRepJson $ object ["test" .= ("test" :: Text)]

person miah_    schedule 04.06.2013    source източник


Отговори (2)


Трябва да преобразувате стойността си toJSON.

Eg.:

jsonToRepJson $ object [("result", toJSON resultValue)]

:)

Можете да прочетете за тази промяна в Yesod 1.2

person josejuan    schedule 04.06.2013
comment
Благодаря, пробвах това, но не ми помогна. Прочетох публикацията в блога и ми помогна много. Ще публикувам отговора си. :) - person miah_; 05.06.2013

Това, което направих е, че използвах манипулатора TypeContent. Ако съм разбрал правилно това, което прочетох, repSelect ни позволява лесно да се справим с какъв тип представяне на данни клиентът иска.

Той чете заглавката на заявката и проверява дали иска JSON, след което ще изплюе JSON данни, ако има нужда от HTML, ще даде HTML страницата. При условие, че вие ​​сами сте добавили конкретните необходими данни с помощта на providRep.

Ето моя код.

mkYesod "APP" [parseRoutes|
        / TestR GET
|]

getTestR::Handler TypedContent
getTestR = do
        selectRep $ do
                provideRep $ jsonToRepJson $ object $ (["test" .= ("test"::Text)])
main::IO()
main = warpDebug 3001 APP
person miah_    schedule 05.06.2013
comment
Вашите действия са излишни тук, както и последният оператор на приложение ($) и не трябва да използвате повече jsonToRepJson, тъй като е остарял ;-) - person Aleksandar Dimitrov; 02.07.2013