【问题标题】:Why does this Haskell statement work in GHCi but fail to compile? [duplicate]为什么这个 Haskell 语句在 GHCi 中工作但无法编译? [复制]
【发布时间】:2019-05-23 10:50:11
【问题描述】:

在 GHCi 中,以下工作只是花花公子:

let (≠) = (/=)

但是尝试从源文件编译它会导致错误:

(≠) = (/=)

这是错误,供参考:

“由于使用 '/=' 而产生的模糊类型变量 'a0' 阻止了约束 '(Eq a0)' 的求解。”

我做错了什么?

【问题讨论】:

  • 尝试添加类型签名? (≠) :: Eq a => a -> a -> Bool?
  • 面部护理。对,就是那样!请将此作为答案,以便我接受?
  • :set -XNoMonomorphismRestriction 在 GHCi 中将正常加载

标签: haskell unicode


【解决方案1】:

您需要添加类型签名,否则 Haskell 会尝试分配一种特定类型,但由于类型不明确而感到困惑。

(≠) :: Eq a => a -> a -> Bool
(≠) = (/=)

【讨论】:

  • “糊涂”可能不是最准确的表述方式,因为这意味着不会“糊涂”的 GHCi 在某种程度上比 GHC 更智能。这里的相关关键字是单态限制。
  • @sepp2k 这是真的,这个答案措辞很糟糕。
猜你喜欢
  • 1970-01-01
  • 2013-04-12
  • 2012-08-09
  • 2016-11-24
  • 2019-08-16
  • 1970-01-01
  • 1970-01-01
  • 2019-12-11
  • 2016-01-13
相关资源
最近更新 更多