haskell - 为什么 Haskell 不允许两个数据构造函数共享 "Const"和其他定义的数据属性?

标签 haskell

data Prop = Const Bool
          | Var Char
          | Not Prop
          | And Prop Prop
          | Imply Prop Prop
我正在实现上述数据构造函数,并进行了少量添加,
data Prop = Const Bool
          | Var Char
          | Not Prop
          | Or Prop Prop
          | And Prop Prop
          | Imply Prop Prop
当我尝试在下面创建另一个使用先前定义的构造函数的数据构造函数时,
data Formula = Const Bool
          | Var Prop
          | Not Formula
          | And Formula Formula
          | Or Formula Formula
          | Imply Formula Formula

我收到此错误:
“'Const'的多个声明”Not 出现同样的错误。 , And , Imply , 和 Or .为什么 Haskell 不允许这样做?

最佳答案

Haskell 不允许这样做,因为它会模棱两可。值构造函数 Prop实际上是一个函数,如果你向 GHCi 询问它的类型可能会更清楚:

> :t Const
Const :: Bool -> Prop
如果您尝试再添加一个 Const在同一模块中的构造函数,您将有两个名为 Const 的“函数”在同一个模块中。你不能这样。

关于haskell - 为什么 Haskell 不允许两个数据构造函数共享 "Const"和其他定义的数据属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64708767/

相关文章:

haskell - Haskell 中的复杂数据结构

haskell - 如何判断 GHC 是否真正推断出严格性?

haskell - 种类有什么用吗?

haskell - 如何轻松地序列化小端 POD?

algorithm - 解释遍历树的Haskell广度优先编号代码

haskell - 如何组合返回 Bool 的函数

haskell - 还记得 xmonad 工作区布局吗?

haskell - 封闭括号内的美元符号

haskell - GHCI 在 Windows 上不那么懒惰?

haskell - ghc 7.10.2 类型系列扩展不起作用