【发布时间】:2017-06-07 04:18:08
【问题描述】:
我以前没有使用过 monad 转换器,但我认为这是我需要的。下面是一些示例代码:
Prelude> (+) <$> Right 2 <*> Right 3
Right 5
Prelude> (+) <$> (['a'],2) <*> (['b'],3)
("ab",5)
但我想像这样结合这两种行为:
Prelude> (+) <$> Right ("a",2) <*> Right ("b",3)
Right ("ab",5)
这自然无法编译,因为(String, Int) 上没有定义数字加法。
Monad transformers Haskell wiki page 建议我需要为内部 monad 使用转换器,在本例中是一对,但在 Hayoo! 或 Hoogle 上搜索 PairT 并没有发现任何相关信息。
我必须自己实现这个转换器,还是我错过了关于 Hackage 的一些东西,或者我只是误解了应该如何做?
注意:
我使用的实际外部 monad 不是 Either,它是我在此 question 中详述的自定义 monad,但它与 Either 非常相似。
【问题讨论】:
标签: haskell monads monad-transformers