4

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

2 回答 2

7

你必须转换你的价值toJSON

例如。:

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

:)

您可以在Yesod 1.2中阅读有关该更改的信息

于 2013-06-04T10:32:53.073 回答
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
于 2013-06-05T02:59:56.737 回答