2012-04-03 21 views
19

estoy leyendo un tipo de datos siguientes:¿Qué significa ': ..' en 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) 

¿Cuál es : .. en la segunda declaración de miembro?

Respuesta

20

El nombre de un constructor puede ser alfanumérico comenzando con una letra mayúscula o simbólico comenzando con dos puntos. En este último caso, el operador se utilizará infix exactamente como las funciones de infijo.

Así :.. es un constructor de infija para el tipo Ne, que toma un argumento de tipo Ne (operando izquierdo) y uno de tipo Clos Term (operando de la derecha).

12

:.. es uno de los constructores para el tipo de datos algebraico Ne. Un nombre de constructor que consiste en puntuación y comienza con : se convierte en un operador infijo. Pruebe esto:

module Main where 

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

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