GHC.TypeLits과 관련된 문제가 발생했습니다. 다음 GADT을 고려GHC.TypeLits에서 비교를 사용하는 방법
data Foo :: Nat -> * where
SmallFoo :: (n <= 2) => Foo n
BigFoo :: (3 <= n) => Foo n
나의 이해는 이제 모든 n
를 들어, 유형 Foo n
의 (a SmallFoo 또는 n
의 값에 따라 BigFoo 중 하나 인) 정확히 하나 개의 값으로 채워집니다이었다. 다음과 같이 지금 구체적인 인스턴스를 구성하려면
는하지만 :
myFoo :: Foo 4
myFoo = BigFoo
그런 GHC를 (7.6.2)는 다음과 같은 오류 메시지가 뱉어 :
No instance for (3 <= 4) arising from a use of `BigFoo'
Possible fix: add an instance declaration for (3 <= 4)
In the expression: BigFoo
In an equation for `myFoo': myFoo = BigFoo
이 이상한 것을 - I 이러한 유형 수준의 nat 비교에 대해 미리 정의 된 인스턴스가 있어야합니다. 유형 생성자를 사용하여 데이터 생성자에서 이러한 종류의 제약을 어떻게 표현할 수 있습니까?