我的理解如下:
假设M1
和M2
是monad,即它们提供符合monadic定律的函数unit
和flatMap
。不幸的是,我们无法为unit
创建flatMap
和M1[M2]
。看起来unit
和flatMap
并不总是存在于任何M1
和M2
。我不知道我们是否需要证明这一点。
因此解决方案是为W
创建一个包装器M1[M2]
,这样W[M1, M2]
就是一个monad,并使用它代替。这个包装纸W
被称为Monad Transformer。
我理解正确吗?
你是对的。通常,它们用于需要组合monads属性的for-comprehension构造中。
Monad变形金刚“一步一步”here。
Erik Bakker在Monad变形金刚上有一个很棒的演讲,名为“期货期权,如何解开它们”(Youtube上有售)。我发现它非常有用,我制作了一个基于它的幻灯片:https://www.slideshare.net/pjschwarz/monad-transformers-part-1