2016-10-03 5 views
1

私は非常に似ている2つのモナドを持っています(実際には同じ名前ですが、完全に同一ではありません)。同じクラスタイプから派生しています。残念なことに、これらのモナドは異なるライブラリで定義され、お互いを知りません。関数AとしてLibraryAでMonadBを使用しようとすると、MonadAが期待していると誤解しています。おそらく一般的なクラスタイプをコンテキストとして代わりに使用して、2つのライブラリを一緒にリンクすることなく、LibraryA内でMonadBを多面的に使用する方法はありますか?ハスケル - 同じクラスから派生した2つのモナドを使い分ける方法はありますか?

+0

モナドは関数のコレクションです。私はあなたがバイナリで別のコードを置き換えることはできないと思います。それはあらゆる種類の奇妙なセキュリティリスクを引き起こします。 –

+3

詳細を記入する必要があります。ここで推測するのは難しいです。 – chi

答えて

3

共通のサブセットに制限されるように、クラスの種類をコンテキストとして使用できます。 MyClassは通常、とにかくMonadが必要になりますaltough

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

また、そこに追加のクラスを追加することができます。

+0

「フォール・ミー」と思っています。この場合、重複していますか? –

+1

@ PaulJohnsonはい、しかし、普遍性を強調するためにそれを使用したい人もいます。 – dfeuer

関連する問題