私は、次の型クラスを使用しています:2つのモジュールから同じインスタンスをインポートしないようにHaskellに指示するには?
module T where
class T a where
v :: a
私が実装T Int
のインスタンス:
import T
import A (av)
instance T Int where
v = 0
main = putStrLn (av ++ show v)
そして、私はまたのインスタンスを持っているから値を、使用したいモジュールをT Int
。
module A where
import T
instance T Int where
v = 0
av = "value from A"
問題は、これが動作しないです。
$ runghc Main.hs
Main.hs:4:9:
Duplicate instance declarations:
instance T Int -- Defined at Main.hs:4:9-13
instance T Int -- Defined at A.hs:3:9-13
Haskellは同じインスタンスのための2つの宣言があると文句を言い。 B
からインスタンスをインポートしないように、または両方のインスタンスを統合するように、またはMain
のインスタンスのみを使用するように指示するにはどうすればよいですか。
これを行わないでください。適切な解決策は、インスタンスを1つの場所に宣言することだけです。 – hammar
@ハマー: 'T'や' B'は書きませんでしたが、 'B'の値を使いたいと思い、' T'のインスタンスを作りたいと思います。 – Dog
ああ、それはやっかいです。その場合、既存の型をラップする 'newtype'を作成し、代わりに' newtype'のインスタンスを書くことができます。 – hammar