Подтвердить что ты не робот

Что значит ":.." означает в Haskell?

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

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)

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

4b9b3361

Ответ 1

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

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

Ответ 2

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

module Main where

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

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