Haskell - 有没有一种方法可以互换地使用从同一个 class 派生的两个单子?
Haskell - Is there a way to use two monads that derive from the same class interchangeably?
我有两个非常相似的单子(它们实际上具有相同的名称,但并不完全相同)并且派生自相同的 class 类型。不幸的是,这些 monad 是在不同的库中定义的,并且彼此不了解。当我尝试将 LibraryA 中的 MonadB 用作函数上下文时,我收到一个错误,指出它需要 MonadA,这是可以理解的。有没有什么方法可以在 LibraryA 中以多态方式使用 MonadB 而无需将两个库链接在一起,也许可以使用它们的通用 class 类型作为上下文?
您可以使用 class 类型作为您的上下文,这样您将被限制在公共子集中。
myFun :: forall m. MyClass m => m a
您还可以在那里添加额外的 class,尽管 MyClass
通常需要 Monad
。
我有两个非常相似的单子(它们实际上具有相同的名称,但并不完全相同)并且派生自相同的 class 类型。不幸的是,这些 monad 是在不同的库中定义的,并且彼此不了解。当我尝试将 LibraryA 中的 MonadB 用作函数上下文时,我收到一个错误,指出它需要 MonadA,这是可以理解的。有没有什么方法可以在 LibraryA 中以多态方式使用 MonadB 而无需将两个库链接在一起,也许可以使用它们的通用 class 类型作为上下文?
您可以使用 class 类型作为您的上下文,这样您将被限制在公共子集中。
myFun :: forall m. MyClass m => m a
您还可以在那里添加额外的 class,尽管 MyClass
通常需要 Monad
。