我有两个非常相似的monad(它们实际上具有相同的名称,但并不完全相同)并且派生自相同的类类型。不幸的是,这些monad在不同的库中定义,并且彼此不了解。当我尝试在LibraryA中使用MonadB作为函数上下文时,我得到一个错误,它期待MonadA,这是可以理解的。有没有办法在LibraryA中多态使用MonadB而不将两个库链接在一起,可能是通过使用它们的通用类类型作为上下文?
答案 0 :(得分:3)
您可以使用类类型作为上下文,这样您就可以将其限制为公共子集。
myFun :: forall m. MyClass m => m a
您还可以在那里添加其他课程,尽管MyClass
通常还需要Monad
。