Sto utilizzando la seguente typeclass:Come dire ad Haskell di non importare la stessa istanza da due moduli?
module T where
class T a where
v :: a
Un'istanza di T Int
che ho implementato:
import T
import A (av)
instance T Int where
v = 0
main = putStrLn (av ++ show v)
E un modulo che voglio usare un valore, che ha anche un esempio di T Int
.
module A where
import T
instance T Int where
v = 0
av = "value from A"
Il problema è questo non funziona:
$ 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 si lamenta che ci sono 2 le dichiarazioni per la stessa istanza. Come posso dirgli di non importare l'istanza da B
o di unificare entrambe le istanze o di utilizzare l'istanza solo da Main
?
Non farlo. La soluzione corretta è solo dichiarare l'istanza in un posto. – hammar
@hammar: Non ho scritto 'T' o' B', ma voglio usare un valore da 'B', e voglio creare un'istanza di' T'. – Dog
Ah, questo rende più complicato. In tal caso, puoi creare un 'newtype' che avvolga il tipo esistente e scrivi invece la tua istanza per' newtype'. – hammar