2013-06-04 185 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

謝謝,我試過那個,但它沒有爲我工作。我確實閱讀過博客文章,對我有很大的幫助。我會發布我的答案。 :) –