Что значит ":.." означает в 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)
Что такое :.. во втором объявлении участника?
Ответы
Ответ 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))