在GHC 7.6中匹配类型级别Nat

时间:2012-09-17 16:30:14

标签: haskell ghc type-families type-level-computation

我的问题可能最容易以一个例子的形式解释:

type family   Take (n :: Nat) (xs :: [k]) :: [k]
type instance Take 0     xs        = '[]
type instance Take (n+1) (x ': xs) = x ': Take n xs

但是,这里的第二个实例被拒绝了,因为作为类型族本身的(+)不能在参数中使用。但似乎没有任何Succ或通常用于匹配Nats的任何东西。

那么,这可以表达出来吗?如果是的话,怎么样?

更新即可。我注意到GHC.TypeLits中的isZeroisEven函数位于“Destructing type-nats”标题下。它们是否意味着以某种方式在类型级别使用?我怀疑不会......但主要是因为我看不出怎么样。 :)

1 个答案:

答案 0 :(得分:5)

我认为这是当前TypeNats实现中的一个已知问题。但它正在进行中,请看一下: https://plus.google.com/117760254622432568621/posts/iMYU2SMViay