了解Scala中的ListT和Monad变换器

时间:2014-03-11 15:09:01

标签: scala monads scalaz monad-transformers

我们知道如何使用X => M[Y]撰写函数M,其中>=>是monad。

例如,如果我有函数getOrders():List[Order]getOrderItems(order: Order):List[OrderItem],我可以轻松地将它们组合起来getAllOrderItems: List[OrderItem]

val getAllOrderItems = getOrders >=> getOrderItems 

此作品 iff List是monad并提供flatMap[B](f: A => List[B])

假设两个函数getOrdergetOrderItems都返回Option[List]而不是List。我们还可以用>=>编写这些函数吗?不,因为flatMap没有Option[List]

为了撰写getOrdergetOrderItems,我们必须编写包装 ListT,其中包含Option[List](和任何{{1}其中M[List]是monad)并提供M。现在我们可以重新定义函数以返回flatMap,然后像以前那样用ListT组合这些函数。

有意义吗?

0 个答案:

没有答案