2011-08-18 11 views
9

que he visto esto en unos pocos lugares:: -> media en una especificación de tipos de Haskell

data T = T a :-> b 

Cabe destacar que en QuickCheck tenemos

data Fun a b = Fun (a :-> b, b) (a -> b) 

Cuál es el :-> y cómo lo hace difiere de ->?

+0

¿Podría publicar la adición como un aswer? Es genial responder a tus propias preguntas, difícil. – fuz

Respuesta

12

Los operadores que comienzan con dos puntos son un nombre de constructor o tipo. En este caso, es un nombre de tipo para un tipo de datos específico de quickcheck, pero en general el símbolo: -> podría usarse para cualquier constructor o nombre de tipo que desee (no es parte del lenguaje propiamente dicho).

The definition of :-> in quickcheck:

-- the type of possibly partial concrete functions 
data a :-> c where 
    Pair :: (a :-> (b :-> c)) -> ((a,b) :-> c) 
    (:+:) :: (a :-> c) -> (b :-> c) -> (Either a b :-> c) 
    Unit :: c -> (() :-> c) 
    Nil :: a :-> c 
    Table :: Eq a => [(a,c)] -> (a :-> c) 
    Map :: (a -> b) -> (b -> a) -> (b :-> c) -> (a :-> c) 
5

respondido a mi propia pregunta: primero vio esto como

data Edge = i :-> i 

:-> es, por supuesto, el constructor.

Cuestiones relacionadas