0

我正在尝试简化复合数据类型,但不知道最好的方法。到目前为止,这是我的代码:

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

4

0 回答 0