从scala monads开始。一个人经常会遇到处理单音单音的情况,为了我们的方便,需要将其转换为单音单音。例如,
Set[IO[Either[A,B]] -> IO[Set[C]]虽然这可以通过转换成序列然后映射来实现,
monadSet
.toList
.sequence[IO, Either[A,B]]
.map(...)当存在不止一个时,情况就变得复杂了,
比如IO[IO[Set[Either[A,B]]]]或Future[Set[Either[A, Future[B]]。通常情况下,如何处理这些嵌套的monad还不是很清楚。这方面的任何资源都会很有帮助。
编辑:相同类型的嵌套monad通常不是问题。主要问题是不同类型的嵌套monad。
发布于 2018-01-11 23:02:25
谢谢你的评论。虽然一般来说,monads不能组合,但我发现herding cats monad transformers在一定程度上解决了这个问题。
尤其是EitherT和optionT封装了多个monads,并提供了处理monads的通用方法。它们只是直观的,这个blog也有助于理解它背后的动机。
https://stackoverflow.com/questions/48141891
复制相似问题