“请问有人能解释或猜测讨论GHC用户指南7.9.2中数据类型提升限制背后的动机吗?”
“以下限制适用于类型提升: - 我们只提升那些种类为<* ->...-> * ->*>的数据类型。特别地,我们不提升高阶种类的数据类型,例如data Fix f = In (f (Fix f)),或者其种类包含提升类型的数据类型,例如Vec :: * -> Nat -> *。 - 特别是,我对最后一部分关于诸如 Vec:: *->Nat->* 的提升类型很感兴趣。 提升这样的一些类型似乎很自然。我很快就遇到了这个问题,当我尝试将我的库转换为使用具体的晋升种类来进行各种幻象类型而不是在所有情况下使用kind <*>时,这将提供更好的文档等。”
“以下限制适用于类型提升: - 我们只提升那些种类为<* ->...-> * ->*>的数据类型。特别地,我们不提升高阶种类的数据类型,例如data Fix f = In (f (Fix f)),或者其种类包含提升类型的数据类型,例如Vec :: * -> Nat -> *。 - 特别是,我对最后一部分关于诸如 Vec:: *->Nat->* 的提升类型很感兴趣。 提升这样的一些类型似乎很自然。我很快就遇到了这个问题,当我尝试将我的库转换为使用具体的晋升种类来进行各种幻象类型而不是在所有情况下使用kind <*>时,这将提供更好的文档等。”
往往像这样的编译器限制原因只需要稍加思考就能明白,但我并没有看到这个。所以我想知道它属于“目前还不需要,所以我们没有构建它”或者“那是不可能/不可决定的/破坏推断”的类别。
instance (x ~ p, C t) => C (x -> t)
这样的事情,以比instance C t => C (p -> t)
更强烈地承诺。我敢打赌,异构相等性也会在那种情况下出现。 - pigworker