불쌍한 영어에 대해 죄송합니다. 제목은 내가 의미하는 바를 설명하지 못할 수도 있습니다.유도하지 않고 Eq를 인스턴스화하는 방법
는 Data.Tree에서 Tree
는 다음과 같이 정의된다 :이
-- | Multi-way trees, also known as /rose trees/.
data Tree a = Node {
rootLabel :: a, --^label value
subForest :: Forest a --^zero or more child trees
}
#ifdef __GLASGOW_HASKELL__
deriving (Eq, Read, Show, Data)
#else
deriving (Eq, Read, Show)
#endif
그것은 인스턴스 ==
-deriving
및 Tree
(날짜)에 대한 /=
이용한다.
도출하지 않고도 동일한 작업을 수행 할 수 있습니까? 다음과 같이 시도해 보겠습니다.
data Test a = Test a
instance Eq Test where
(Test a) == (Test b) = a == b
하지만 예외가 발생합니다. 그 이유는 a와 b의 유형에 관한 것이라고 생각합니다.
==
으로 데이터에 대한 맞춤 작업을 정의할지 여부는 무엇을 할 수 있습니까?
나는 Functor
과 fmap
을 사용할 수 있음을 알고 있습니다. 하지만 ==
을 a == b
과 같이 사용하려면 a = Test 1
과 b = Test "a"
이 필요합니다. 가능한가?
N.B. 'Forest a'는'[a]'와 동의어이기 때문에 기술적으로'Eq (a)'를 의미하기 때문에'Eq (Forest a)'제약 조건은 필요하지 않습니다. 그러나이 대답은 질문의 매개 변수를 고려할 때 분명합니다. – luqui
@luqui : 당신 말이 맞아요. 나는 숲이'[Tree a]'로 정의 된 것을 알지 못했다. (몇몇 추가적인 필드가 추가되었을 가능성이있다.) 나는 당신의 쪽지를 몇 가지 덧글과 함께 답안에 추가했습니다. 감사! –
마지막 두 인스턴스는'Eq (Tree a)'에'Eq'가 없습니다. – chi