【问题标题】:Why are types with no data constructors valid?为什么没有数据构造函数的类型有效?
【发布时间】:2012-02-08 09:28:17
【问题描述】:

这似乎是合法的:

data MagazineInfo = Int String
    deriving (Show)

我不确定是否有默认的数据构造函数,但是上面的代码可以编译。

为什么上面的 Haskell 是有效的,因为我没有明确指定值构造函数?

【问题讨论】:

  • 如果您尝试通过编写选择器来使用此数据类型,您会注意到没有Int 可以退出...

标签: haskell


【解决方案1】:

那里确实有一个数据构造函数——它是Int。类型名称位于与数据构造函数不同的命名空间中,这就是为什么即使恰好有一个类型也名为 Int 的类型也不会出现错误。

【讨论】:

  • 在只有一个构造函数的情况下,数据构造函数名称与类型名称相同是很常见的。 data MagazineInfo = MagazineInfo String
  • 不过,还有empty types 之类的东西——但实际上发帖者的例子不是一个。空类型与一些高级类型系统技术结合使用。
  • 当然,对于单构造函数、单项的情况,newtypedata 更受欢迎。
  • @DanBurton:除非你想要一个尊贵的⊥。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-06-18
  • 1970-01-01
  • 2012-05-01
  • 2019-01-03
  • 2014-02-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多