2011-08-18 13 views
9

widziałem to w kilku miejscach:Co robi: -> oznacza w specyfikacji typu Haskell

data T = T a :-> b 

Zwłaszcza w QuickCheck mamy

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

Czym jest i jak działa :-> różni się od ->?

+0

Czy możesz dodać wiadomość jako dodatek? Wspaniale jest odpowiadać na własne pytania, trudne. – fuz

Odpowiedz

12

Operatory rozpoczynające się dwukropkiem to nazwa konstruktora lub typu. W tym przypadku jest to nazwa typu dla typu danych specyficznego dla quickcheck, ale ogólnie symbol: -> może być użyty dla dowolnego konstruktora lub nazwy typu, jak chcesz (nie jest częścią właściwego języka).

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

odpowiedział na moje własne pytanie: pierwszy raz zobaczyłem to jako

data Edge = i :-> i 

:-> jest oczywiście konstruktor.