Ich verwende den folgenden typeclass:Wie kann man Haskell mitteilen, nicht dieselbe Instanz von zwei Modulen zu importieren?
module T where
class T a where
v :: a
Eine Instanz T Int
, die ich umgesetzt:
import T
import A (av)
instance T Int where
v = 0
main = putStrLn (av ++ show v)
Und ein Modul, das ich von Wert verwenden möchten, die auch eine Instanz hat von T Int
.
module A where
import T
instance T Int where
v = 0
av = "value from A"
Das Problem ist, das nicht funktioniert:
$ 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 beklagt, dass es 2 Erklärungen für die gleiche Instanz. Wie kann ich ihm mitteilen, dass er die Instanz nicht von B
importieren oder beide Instanzen vereinheitlichen oder nur die Instanz von Main
verwenden soll?
Tun Sie das nicht. Die richtige Lösung besteht darin, die Instanz nur an einer Stelle zu deklarieren. – hammar
@hammar: Ich habe 'T' oder' B' nicht geschrieben, aber ich möchte einen Wert von 'B' verwenden, und ich möchte eine Instanz von' T' machen. – Dog
Ah, das macht es schwieriger. In diesem Fall können Sie einen 'newtype' erstellen, der den vorhandenen Typ umschließt, und stattdessen Ihre Instanz für den' newtype' schreiben. – hammar