为什么没有数据构造函数的类型有效?

18 haskell

这似乎是合法的:

data MagazineInfo = Int String
    deriving (Show)
Run Code Online (Sandbox Code Playgroud)

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

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

C. *_*ann 29

你有一个数据构造函数 - 它是Int.类型名称存在于与数据构造函数不同的命名空间中,这就是为什么即使碰巧存在一个也被命名的类型也不会出现错误的原因Int.

  • 然而,还有[空类型](http://www.haskell.org/haskellwiki/Empty_type)这样的事情 - 但实际上海报的例子不是一个.空类型与一些高级类型系统技术结合使用. (8认同)
  • 并且,在这种情况下,数据构造函数名称与类型名称相同是常见的,例如,只有一个construtor.`data MagazineInfo = MagazineInfo String` (5认同)
  • 当然,对于单构造函数,单项情况,`newtype`比`data`更受欢迎. (4认同)
  • @DanBurton:除非你想要一个杰出的⊥. (3认同)