jsonToRepJson坏了吗?

时间:2013-06-04 09:46:45

标签: haskell yesod

我刚刚开始做一些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)]

2 个答案:

答案 0 :(得分:7)

您必须转换价值toJSON

例如:

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

:)

您可以在Yesod 1.2

中了解该更改

答案 1 :(得分:0)

我做的是,我使用了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