Existe alguma maneira de fazer isso?
type V = VList
{- type V2 a = V (V a)
type V4 a = V2 (V2 a)
type V8 a = V4 (V4 a)
type V16 a = V8 (V8 a)
type V32 a = V16 (V16 a) -}
type C a b c = a (b c)
type D a b = a b b
type E = D C
type V2 a = V (V a)
type V4 = E V2
type V8 = E V4
type V16 = E V8
type V32 = E V16
Eu quero fazer esse tipo por exemplo
type Vector25 = C (C V16 V8) V Empty
Sem ter que fazer
type Vector25 = (V16 (V8 (V Empty))
O módulo a seguir carrega no ghci sem problemas:
Todas as definições são as mesmas que as suas, mas eta-expandidas. Se você
:k!
as usar o suficiente, elas até reduzem.Não sei por que não reduz totalmente na primeira consulta. Talvez seja um bug.