나는 다음과 같은 typeclass을 사용하고 있습니다 :하스켈이 두 모듈에서 같은 인스턴스를 가져 오지 않게하는 방법?
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
하스켈 같은 예를 들어 두 선언이 있다는 것을 뿌려줍니다. B
에서 인스턴스를 가져 오지 말라고하거나 두 인스턴스를 통합하거나 Main
의 인스턴스 만 사용하려면 어떻게해야합니까?
이렇게하지 마십시오. 적절한 해결책은 인스턴스를 한 곳에서 선언하는 것입니다. – hammar
@hammar :'T' 또는'B'를 쓰지 않았지만'B'의 값을 사용하고 싶습니다.'T'의 인스턴스를 만들고 싶습니다. – Dog
아, 그게 더 까다 롭습니다. 이 경우, 기존 타입을 래핑하는'newtype'을 만들 수 있고 대신에'newtype'을위한 인스턴스를 작성할 수 있습니다. – hammar