Gli operatori che iniziano con due punti è un nome costruttore o tipo. In questo caso si tratta di un nome di tipo per un tipo di dati specifico per quickcheck, ma in generale il simbolo: -> potrebbe essere utilizzato per qualsiasi costruttore o nome di tipo che desideri (non fa parte del linguaggio corretto).
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)
Potresti postare l'aggiunta come una copia? È bello rispondere alle tue stesse domande, difficile. – fuz