2012-04-03 16 views
19

Sto leggendo un tipo di dati seguente:Cosa significa ": .." in 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) 

Qual è : .. nella seconda dichiarazione di membro?

risposta

20

Il nome di un costruttore può essere alfanumerico che inizia con una lettera maiuscola o simbolico che inizia con due punti. In quest'ultimo caso, l'operatore verrà utilizzato infisso proprio come le funzioni infix.

Così :.. è un costruttore di infisso per il tipo di Ne, che prende un argomento di tipo Ne (operando a sinistra) e uno di tipo Clos Term (operando a destra).

12

:.. è uno dei costruttori per il tipo di dati algebrico Ne. Un nome costruttore costituito da punteggiatura e che inizia con : diventa un operatore infisso. Prova questo:

module Main where 

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

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