Shape a = Shape a 更准确地说,这是我得到的错误 [1-6ren">
gpt4 book ai didi

Haskell 代码行未编译 : "Illegal datatype context"

转载 作者:行者123 更新时间:2023-12-03 10:23:37 24 4
gpt4 key购买 nike

我无法在 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你得到 Shape :: Eq a => a -> Shape a .它不会让你不必写 Eq a在涉及 Shape 的类型签名中s,并且实际上甚至会要求您在不需要时编写它们。当数据类型中的严格字段需要类约束时,它曾经很有用,但该功能很久以前就被删除了。

    简而言之,仅删除上下文几乎总是对您的程序的改进,因此它们已从 Haskell 2011 语言标准中删除。自 GHC 7.0.1 以来,有一个关闭它们的选项,自 7.2.1 以来,它一直是默认设置。

    关于Haskell 代码行未编译 : "Illegal datatype context",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18934882/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com