当前位置:  开发笔记 > 编程语言 > 正文

为什么Eq(GADT)案例给我一个类型错误?

如何解决《为什么Eq(GADT)案例给我一个类型错误?》经验,为你挑选了1个好方法。

来自GHC文档:

一般原则是:类型细化仅基于用户提供的类型注释来执行.因此,如果没有提供类型签名eval,则不会进行类型细化,并且会发生许多模糊的错误消息.

换句话说,当我们在GADT类型上进行模式匹配时(通过多个方程或使用a case),提供显式类型注释是必要的.

作为一个思想实验考虑

data T a where C :: Char -> T Char

f (C c) = c

什么是正确的打字?

f :: T a    -> a
f :: T a    -> Char
f :: T Char -> Char

最后一个更具体,前两个更严格一般.然而,前两个中没有一个比另一个更通用 - GHC不能选择"最好的".

GADT在这方面并不特别.大多数高级功能需要类型注释:GADT,更高级别的类型,至少类型系列.



1> chi..:

来自GHC文档:

一般原则是:类型细化仅基于用户提供的类型注释来执行.因此,如果没有提供类型签名eval,则不会进行类型细化,并且会发生许多模糊的错误消息.

换句话说,当我们在GADT类型上进行模式匹配时(通过多个方程或使用a case),提供显式类型注释是必要的.

作为一个思想实验考虑

data T a where C :: Char -> T Char

f (C c) = c

什么是正确的打字?

f :: T a    -> a
f :: T a    -> Char
f :: T Char -> Char

最后一个更具体,前两个更严格一般.然而,前两个中没有一个比另一个更通用 - GHC不能选择"最好的".

GADT在这方面并不特别.大多数高级功能需要类型注释:GADT,更高级别的类型,至少类型系列.

推荐阅读
手机用户2502852037
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有