有什么办法可以做到这一点?
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
我想制作这种类型
type Vector25 = C (C V16 V8) V Empty
无需做
type Vector25 = (V16 (V8 (V Empty))
以下模块可以很好地加载到 ghci 中:
所有定义都和你的一样,但 eta 被扩展了。如果你
:k!
足够多,它甚至会减少。我不确定为什么它在第一次查询时没有完全减少。也许这是一个错误。