Я использую следующий класс типов:Как сказать 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
?
Не делайте этого. Правильное решение - объявить экземпляр только в одном месте. – hammar
@hammar: Я не писал 'T' или' B', но я хочу использовать значение из 'B', и я хочу создать экземпляр' T'. – Dog
А, это делает его более сложным. В этом случае вы можете сделать 'newtype' завершение существующего типа и вместо этого записать ваш экземпляр для' newtype'. – hammar