2015-05-06 93 views
0
import qualified Data.ByteString.Lazy as L 
import Data.Enumerator.List (consume) 

data App = App 
mkYesod "App" [parseRoutesNoCheck| 
/*Texts WikR GET --PathMultiPiece handler for all combinations 
/WikiR POST 
|] 
instance Yesod App 

getWikR :: [Text] -> Handler Text 
getWikR parts = return "" --defaultLayout [whamlet||] 

postWikiR = do 
    bss <- lift consume 
    return $ RepJson $ toContent $ L.fromChunks bss 

main :: IO() 
main = warp 3000 App 
匹配類型Data.Enumerator.Internal.Iteratee

給出了錯誤,無法與IO

yesod/hw.hs:14:1: 
    Couldn't match type ‘Data.Enumerator.Internal.Iteratee 
          Data.ByteString.Internal.ByteString m0’ 
        with ‘IO’ 
    Expected type: HandlerT App IO RepJson 
     Actual type: HandlerT 
        App 
        (Data.Enumerator.Internal.Iteratee 
         Data.ByteString.Internal.ByteString m0) 
        RepJson 
    In the first argument of ‘yesodRunner’, namely ‘postWikiR’ 
    In the expression: 
     yesodRunner postWikiR env3739_adGV (Just WikiR) req3739_adGW 

錯誤行@ LN-NUM#14 mkYesod "App" [parseRoutesNoCheck|

我相信,錯誤與postWikiR#return $ RepJson $ toContent $ L.fromChunks bss有關。但不知道,如何解決?

Reference-1

+0

Rosetta項目已過期。我建議閱讀yesodweb.com上的內容 –

回答

1

也許你正在試圖運行舊的代碼不與當前工作耶索德。

你能得到這個與

import Data.Enumerator (run_) 
... 
bss <- run_ consume 

編譯和運行(GHC-7.10.1,耶索德-1.4.1.5),但我不知道你想讓它做什麼。因爲它會返回一個空的列表。