Scala 中的 Monad 变形金刚
Monad Transformers in Scala
我一直在尝试简单的 Monad 变形金刚,我在其中理解涉及 M[F[A]]
,其中 M
和 F
是单子。如果 S
是不同的 monad,我怎样才能让 M[F[A]]
和 M[S[A]]
在 for comp 中一起工作?
例如:
val a: Future[List[Int]] = ...
val b: Future[Option[Int]] = ...
a
需要一个 ListT[Future, Int]
和 b
需要一个 OptionT[Future, Int]
但是这些不组成,我需要使用另一个变压器吗?这是否取决于我在 for comp 中使用它们的顺序?
Monad Transformers 帮助您组合两个 F[G[X]]
.
类型的值
换句话说,monad 转换器与 F[G[X]]
一起工作,因为它们利用了这样一个事实,即如果 Monad[G]
存在,你知道如何组合两个 G[X]
。
现在,对于 F[G[X]
和 F[H[X]]
,即使您声明 G
和 H
有 Monad
个实例,您仍然没有没有通用的组合方式。
恐怕组合 F[G[X]]
和 F[H[X]]
没有通用的 monad 转换器解决方案。
您可以尝试使用 monad 转换器堆栈 ListT[OptionT[Future, Int]]
,它可以一次组合所有效果。您可以将 a
和 b
提升到该 monad 转换器堆栈的值中。
我一直在尝试简单的 Monad 变形金刚,我在其中理解涉及 M[F[A]]
,其中 M
和 F
是单子。如果 S
是不同的 monad,我怎样才能让 M[F[A]]
和 M[S[A]]
在 for comp 中一起工作?
例如:
val a: Future[List[Int]] = ...
val b: Future[Option[Int]] = ...
a
需要一个 ListT[Future, Int]
和 b
需要一个 OptionT[Future, Int]
但是这些不组成,我需要使用另一个变压器吗?这是否取决于我在 for comp 中使用它们的顺序?
Monad Transformers 帮助您组合两个 F[G[X]]
.
换句话说,monad 转换器与 F[G[X]]
一起工作,因为它们利用了这样一个事实,即如果 Monad[G]
存在,你知道如何组合两个 G[X]
。
现在,对于 F[G[X]
和 F[H[X]]
,即使您声明 G
和 H
有 Monad
个实例,您仍然没有没有通用的组合方式。
恐怕组合 F[G[X]]
和 F[H[X]]
没有通用的 monad 转换器解决方案。
您可以尝试使用 monad 转换器堆栈 ListT[OptionT[Future, Int]]
,它可以一次组合所有效果。您可以将 a
和 b
提升到该 monad 转换器堆栈的值中。