2016-05-13 61 views
1

我想學習Yesod並試圖實現一個簡單的REST應用程序,每次我得到一個GET請求我寫一些東西到一個文件。現在,我有以下處理函數:Haskell Yesod和writeFile

getTestR = 
    do 
    return $ writeFile "test.txt" "Just something" 
    return $ object ["result" .= "Ok"] 

我所期待的是,文件test.txt將被創建,我會獲得一個JSON與{result=Ok}。但是,我正在獲取JSON,但該文件未被創建。

我猜writeFile沒有被評估,因爲懶惰的評估,但我不知道如何克服這個問題。提前致謝。

+0

首先刪除'return',看看編譯告訴你的類型......然後找'liftIO';) – Carsten

+0

'return'這裏包裹'IO '計算到你的Yesod-monad中,然後忽略它 - 你可以用簡單的'IO'做這個 - 如果你打開'GHCi'並輸入'return(print「Hello」)'你會看到... * nothing * - 'IO(IO())'只是被忽略 – Carsten

+0

是的,非常感謝您的回答,我沒有回報,因爲這個,我添加了它: – Kabal

回答

1

只需使用liftIO

getTestR = 
    do 
    liftIO $ writeFile "test.txt" "Just something" 
    return $ object ["result" .= "Ok"]