Haskell - 有没有办法使用两个可以互换的同一个类的monad?

时间:2016-10-03 15:20:00

标签: haskell polymorphism monads

我有两个非常相似的monad(它们实际上具有相同的名称,但并不完全相同)并且派生自相同的类类型。不幸的是,这些monad在不同的库中定义,并且彼此不了解。当我尝试在LibraryA中使用MonadB作为函数上下文时,我得到一个错误,它期待MonadA,这是可以理解的。有没有办法在LibraryA中多态使用MonadB而不将两个库链接在一起,可能是通过使用它们的通用类类型作为上下文?

1 个答案:

答案 0 :(得分:3)

您可以使用类类型作为上下文,这样您就可以将其限制为公共子集。

myFun :: forall m. MyClass m => m a

您还可以在那里添加其他课程,尽管MyClass通常还需要Monad