如何处理Scalaz中的多个IO点并进行喷涂

时间:2014-05-08 10:57:45

标签: monads scalaz spray io-monad

REST调用使用spray.io。它使用各种函数验证该调用中的请求,包括查询数据存储的中间函数。如果一切正常,则写入所述数据存储。在这种情况下,最多有4个IO操作:HTTP请求,数据读取,数据写入和HTTP响应。如果我决定使用IO monad,我将如何构造执行IO,因为我有一些可能需要或可能不需要(即,如果某些验证失败,则可能不需要执行读取和写入操作)中穿插非IO函数?据推测,首先我可以先忽略喷雾剂,并认为评价是在喷雾完成之后开始的。但是如何使用非IO功能组合IO功能?我是否必须将非io内容提升为io monad?

1 个答案:

答案 0 :(得分:1)

简短的回答是期货。为了无阻塞,您的IO操作应该返回您映射到其他期货的期货。在Spray中,您可以使用Future完成请求。