Webアプリケーション(Spockウェブサーバー)のルート定義内でuuidを返そうとしています。GETルート内のHaskell Spock IO ActionCtxTエラー
ルートは今、私はData.UUID.V1モジュールからnextRandom
を経由してUUIDを返すようにしようと
get("PATH") $ do
text "Hello World"
を定義するために非常に単純です。 この関数は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を実行できない理由を理解できません。
それはそれをしました。リフトIO、モナドトランススタック?まあ、まあ、私は結局そこに着くでしょう。 uuidは[おそらくUUID]なので、ショーは 'Just 03fcbcbe-fbf0-11e6-8001-a8667f260e4c'を返しています。私は何とかそれからアクチュアールの価値を得る方法を見つけ出し、ここで完全な正しい結果を投稿すると思います。感謝万円。 –