斯卡拉的Monad变形金刚

问题描述 投票:3回答:2

我一直在尝试简单的Monad变形金刚,我在那里有M[F[A]]的理解,其中MF是monad。如果M[F[A]]是一个不同的monad,我如何让M[S[A]]S在for comp中一起工作?

例如:

val a: Future[List[Int]] = ...
val b: Future[Option[Int]] = ...

a需要一个ListT[Future, Int]b需要一个OptionT[Future, Int]但这些不构成,我需要使用另一个变压器吗?这取决于我在for comp中使用它们的顺序吗?

scala monads scalaz monad-transformers
2个回答
4
投票

Monad变形金刚帮助你编写两个F[G[X]]类型的值。

换句话说,monad变换器与F[G[X]]合作,因为它们利用了如果G[X]存在,你知道如何组成两个Monad[G]的事实。

现在,在F[G[X]F[H[X]]的情况下,即使你声明GHMonad实例,你仍然没有一般的方法来组成它们。

我害怕编写F[G[X]]F[H[X]]没有monad变换器的一般解决方案。


0
投票

您可以尝试使用monad变换器堆栈ListT[OptionT[Future, Int]],它可以同时组合所有效果。您可以将ab提升为该monad变换器堆栈的值。

© www.soinside.com 2019 - 2024. All rights reserved.