我尝试在 Web 应用程序( Spock Webserver)的路由定义中返回一个 uuid 。
路线很容易定义
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。