나는 the documentation for -XUndecidableInstances을 알고 있지만, 나는 정교함을 요구할 것이라고 생각했습니다.UndecidableInstances는 언제 안전한가요? GHC 확장에 관한 몇 가지 일반적인 질문
내가 (-XMultiParamTypeClasses로 허용)이 다중 매개 변수 typeclasses 이제
class Foo a b
class Goo a b
이 있다고 가정, 나는 매개 변수화 된 데이터 유형 내가 Foo
때의 인스턴스를 만들고 싶어
data Bar a b
이 있다고 가정 매개 변수 중 하나는 Goo
의 인스턴스의 일부입니다. 그래서 여기에 내가 쓰고 싶은거야, 이전 문장이 정확한 용어를 사용 확실하지 않다 :
instance (Goo c d) => Foo d (Bar a d)
는 I는 UndecidableInstances
확장자없이 허용하고 있지 않다. 인스턴스가 c
유형을 참조하지 않기 때문에 이것이 올바른지 생각해보십시오.
나는 ...
- 그냥 확장을 가능하게 하는가? 누군가 나를 괴롭히는 문제를 정교하게 처리 할 수 있습니까?
Foo
에 다른 매개 변수를 추가하여 마지막 인스턴스 선언이Foo c d (Bar a d)
과 같아 지도록합니까? 문제는 "제 4 유형 매개 변수"를 전혀 참조하지 않는 다른 인스턴스 (Foo
)가있을 수 있습니다. 즉, 내 코드와 관련이없는 부분에instance Foo A B
형태의 인스턴스가 있기 때문에 깨질 수 있습니다. 오히려 내 수업이 아니라 내 문제를 고칠 수 있습니다.- 매개 변수가 충분한 새 클래스
FooGoo
을 만드시겠습니까? 나는이 경우 자신을 반복하고있는 것처럼 느낄 것입니다. 그러나 적어도 관련이없는 수업은 중단하지 않을 것입니다.
누구나 지혜가 있습니까?
감사합니다. 이것은 약간의 설명을 가져옵니다. – gspr
+1은 'IncoherentInstances'를 악으로 설명합니다. –
'Goo''가 함수 적 종속성'd -> c'를 가지지 않는 한'Goo cd' 제약 조건으로'Foo d (Bar ad)'인스턴스를 사용할 수 없게 될 것입니다. 그렇지 않으면 컴파일러가'Goo' 인스턴스 사용? 모든'Goo' 인스턴스가'd'에없는 타입 변수로'c'를 가지고 있다면, @ barsoap의 제안은 그 타입 파라미터를 떨어 뜨리는 방법입니다. – mokus