我无法在Haskell中编译此行代码,但可以在我教授的系统上使用。我使用ghci版本7.6.2。
data Eq a => Shape a = Shape a
更确切地说,这是我得到的错误
[1 of 1] Compiling Main ( test.hs, interpreted )
test.hs:1:6:
Illegal datatype context (use -XDatatypeContexts): Eq a =>
Failed, modules loaded: none.
这是什么错误?
谢谢
您的教授可能正在使用旧版本的GHC。您发布的行使用的功能最近已被删除。可能的解决方案是:
删除Eq a =>
并写入data Shape a = Shape a
。
正如GHC所说,给该-XDatatypeContexts
标志重新启用已删除的功能。
更详细地:Eq a =>
类型声明的一部分称为数据类型上下文。它的唯一功能是限制Shape
构造函数的类型,以便代替Shape :: a -> Shape a
get Shape :: Eq a => a -> Shape a
。它不会使您不必编写Eq a
涉及Shape
s的类型签名,甚至在不需要时甚至会要求您编写它们。当数据类型中的严格字段需要类约束时,该功能曾经很有用,但该功能早已被删除。
简而言之,仅删除上下文几乎总是对您的程序有所改进,因此将它们从Haskell 2011语言标准中删除。自GHC 7.0.1起,可以选择关闭它们,而自7.2.1起,它已成为默认设置。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句