我正在尝试简化复合数据类型,但不知道最好的方法。到目前为止,这是我的代码:
data Init a b c d = Init a b c d
data Wrap a = WNil (Init a b c d)
| WCons a (Wrap a)
我一直看到的问题可能很明显 - 我无法将预期结果类型的类型变量与封装的类型变量统一起来:
-- | Will fail to compile
unWrap :: Wrap a -> Init a b c d
unWrap (WNil x) = x
unWrap (WCons _ xs) = unWrap xs
我听说-XExistentialQuantification
作为一种可能的解决方案被抛出,但我无法正常工作。有没有人知道该怎么做,除了将类型参数浮动到Wrap
?