2013-06-04 124 views
4

我刚刚开始做一些Yesod + Haskell的东西。 是jsonToRepJson破或什么的?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)] 

回答

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 
+0

您的'在这里是多余的,最后一个应用程序运算符($)也是多余的,您不应该再使用jsonToRepJson,因为它已被弃用;-) –

7

你必须转换值toJSON

例如:

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

:)

你可以阅读有关Yesod 1.2

+0

谢谢,我试过那个,但它没有为我工作。我确实阅读过博客文章,对我有很大的帮助。我会发布我的答案。 :) –