我们知道如何使用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])
假设两个函数getOrder
和getOrderItems
都返回Option[List]
而不是List
。我们还可以用>=>
编写这些函数吗?不,因为flatMap
没有Option[List]
。
为了撰写getOrder
和getOrderItems
,我们必须编写包装 ListT
,其中包含Option[List]
(和任何{{1}其中M[List]
是monad)并提供M
。现在我们可以重新定义函数以返回flatMap
,然后像以前那样用ListT
组合这些函数。
有意义吗?