我嘗試返回web應用程序的路由定義中的uuid(Spock Webserver)。Haskell在GET路由中的Spock IO ActionCtxT錯誤
航線是非常簡單的定義
get("PATH") $ do
text "Hello World"
現在我嘗試通過nextRandom
從Data.UUID.V1模塊返回UUID。 該函數返回一個IO(Maybe UUID)
值。
所以我想,既然我在IO,並與另一IO工作,我必須做的值綁定簡單地用<-
,就像這樣:
get ("id") $ do
uuid<-nextUUID
json . pack $ show $ uuid
但是,編譯說沒有:
Couldn't match type ‘ActionCtxT ctx0 m0’ with ‘IO’
Expected type: IO b0
Actual type: ActionCtxT ctx0 m0 b0
• In a stmt of a 'do' block: json . pack $ show $ uuid
In the second argument of ‘($)’, namely
‘do { uuid <- nextUUID;
json . pack $ show $ uuid }’
爲什麼拋出這個錯誤? 我可以通過一個簡單的打印示例輕鬆創建uuid,但在Spock中,我不明白ActionCtxT的功能以及爲什麼我無法在其中執行uuid IO。
這樣做了,而且有些新東西讓我學習。 liftIO,Monad變壓器堆疊?那麼,我最終會到達那裏。 現在該節目正在返回'Just 03fcbcbe-fbf0-11e6-8001-a8667f260e4c',因爲uuid是我猜想的[也許UUID]。我想我會弄清楚如何從中獲得真正的價值,並在此發佈完整的正確結果。太感謝了。 –