ADT имена. Что такое «левый а», а затем «а» в хаскеле? - PullRequest
9 голосов
/ 01 ноября 2011

Если у меня есть Haskell ADT, такой как:

data Foo
 = A Int Double
 | B Bool [Integer]
 | C (Maybe String) Float

A, B и C называются конструкторами данных ; а иногда как конструкторов значений . Но как правильно назвать:

  1. «строка / альтернатива»: например, B Bool [Integer]; и
  2. «поле / элемент» из «строки / альтернативы»: например, Double в A или [Integer] в B?

Ответы [ 2 ]

11 голосов
/ 01 ноября 2011

Чтение Раздела 4.2 из отчета Haskell98 (http://www.haskell.org/onlinereport/decls.html):

  1. Это явно не прописано, но B Bool [Integer], вероятно, наиболее правильно называется "декларацией конструктора"(для конструктора с именем B)
  2. Такие вещи, как Double в A, называются объявлениями полей (хотя простой вызов этого поля тоже должен быть в порядке).
3 голосов
/ 01 ноября 2011
data Foo = A Int Double
     ^^ Type Constructor "data Foo"
           ^ value Constructor "A"
             ^^ Component "Int" and "Double"

A |B обычно называют альтернативами или случаями.Извините за дерьмовую диаграмму.

Источник: Real World Haskell ch3

...