Что означает «: ..» в Хаскеле? - PullRequest
19 голосов
/ 03 апреля 2012

Я читаю следующий тип данных:

data Ne
  = NVar Id
  | Ne :.. (Clos Term)
  | NSplit Ne (Bind (Bind (Clos Term)))
  | NCase Ne (Clos [(Label, Term)])
  | NForce Ne
  | NUnfold Ne (Bind (Clos Term))
  deriving (Show, Eq)

Что такое : .. во втором объявлении члена?

Ответы [ 2 ]

20 голосов
/ 03 апреля 2012

Имя конструктора может быть буквенно-цифровым, начинающимся с заглавной буквы, или символическим, начинающимся с двоеточия.В последнем случае оператор будет использовать инфикс, как и инфиксные функции.

Итак, :.. - это инфиксный конструктор для типа Ne, который принимает аргумент типа Ne (левый операнд) иодин из типов Clos Term (правый операнд).

12 голосов
/ 03 апреля 2012

:.. является одним из конструкторов для алгебраического типа данных Ne. Имя конструктора, состоящее из пунктуации и начинающееся с :, становится инфиксным оператором. Попробуйте это:

module Main where

data List a = Nil
            | a :.. (List a)
            deriving Show

main = print (1 :.. (2 :.. Nil))
...