我在使用GHC.TypeLits时遇到了问题.考虑以下GADT:
data Foo :: Nat -> * where
SmallFoo :: (n <= 2) => Foo n
BigFoo :: (3 <= n) => Foo n
Run Code Online (Sandbox Code Playgroud)
我的理解是,现在每个n
类型Foo n
都只填充一个值(根据值的值,可以是SmallFoo或BigFoo n
).
但是,如果我现在想构建一个具体的实例,如下所示:
myFoo :: Foo 4
myFoo = BigFoo
Run Code Online (Sandbox Code Playgroud)
然后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
Run Code Online (Sandbox Code Playgroud)
这看起来很奇怪 - 我预计会有这种类型级别nat比较的预定义实例.如何使用类型级自然在我的数据构造函数中表达这些类型的约束?
归档时间: |
|
查看次数: |
626 次 |
最近记录: |