haskell ghc type-families type-level-computation

haskell - Coincidencia en el nivel de tipo Nat en GHC 7.6



type-families type-level-computation (1)

Mi pregunta es probablemente la más fácil de explicar en forma de un ejemplo:

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

La segunda instancia aquí se rechaza, sin embargo, porque (+) , al ser una familia de tipos, no se puede usar en los argumentos. Pero no parece haber ningún Succ o algo que se use generalmente para emparejar Nats.

Entonces, ¿se puede expresar esto? Y si es así, ¿cómo?

Actualizar isEven funciones isZero e isEven en GHC.TypeLits están bajo el encabezado "Destructing type-nats". ¿Están destinados a ser utilizados en el nivel de tipo de alguna manera? Yo sospecharía que no ... pero sobre todo porque no puedo ver cómo. :)