ADT名称.在Haskell中什么是'left a`,然后什么是`a`?

use*_*370 9 haskell functional-programming terminology algebraic-data-types

如果我有一个Haskell ADT,例如:

data Foo
 = A Int Double
 | B Bool [Integer]
 | C (Maybe String) Float
Run Code Online (Sandbox Code Playgroud)

A,BC被称为数据构造 ; 有时作为价值构造者.但是正确的名称是什么:

  1. "行/替代":例如B Bool [Integer]; 和
  2. "行/替代"的"字段/元素":例如Doublein A[Integer]in B

Sum*_*ndo 11

阅读Haskell98报告(http://www.haskell.org/onlinereport/decls.html)中的第4.2节:

  1. 这没有明确说明,但B Bool [Integer]可能最正确地称为"构造函数声明"(对于被调用的构造函数B)
  2. Doublein 这样的东西A被称为字段声明(虽然简单地称它为字段也应该没问题).


sto*_*tal 3

data Foo = A Int Double
     ^^ Type Constructor "data Foo"
           ^ value Constructor "A"
             ^^ Component "Int" and "Double"
Run Code Online (Sandbox Code Playgroud)

一个 | B 通常被称为替代方案或案例。抱歉,图表很糟糕。

资料来源:现实世界 Haskell ch3