【发布时间】:2014-05-08 10:57:45
【问题描述】:
REST 调用使用 spray.io。它使用各种函数验证该调用中的请求,包括查询数据存储的中间函数。如果一切正常,那么它将写入所述数据存储。在这种情况下,最多有 4 个 IO 操作:HTTP 请求、数据读取、数据写入和 HTTP 响应。如果我决定使用 IO monad,我将如何构造执行 IO,因为我有一些可能需要也可能不需要(即,如果某些验证失败,则可能不需要进行读写操作)穿插非 IO 函数?大概,首先我可以先忽略喷涂的东西,并将评估视为在喷涂完成后开始。但是如何将 IO 函数与非 IO 函数组合起来呢?我是否必须将非 io 的东西提升到 io monad 中?
【问题讨论】:
-
您使用
map与非IO 事物组合,flatMap与IO 事物组合。或者,如果您使用for/yield糖,则将←用于 IO 操作,将=用于非 IO 调用。
标签: monads scalaz spray io-monad