2012-04-03 4 views
19

Я читаю следующий тип данных:Что означает «: ..» в 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) 

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

ответ

20

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

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

12

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

module Main where 

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

main = print (1 :.. (2 :.. Nil)) 
Смежные вопросы