2011-03-19 8 views
18

Powiel możliwe:
Haskell Weird Kinds: Kind of (->) is ?? -> ? -> *W GHCi, dlaczego rodzaj strzałki funkcji `: kind (->)` zawiera znaki zapytania `(->) :: ?? ->? -> * `?

W GHCi (wersja 7.0.2), jeśli mogę prosić o rodzaju rodzaju funkcji, wynik ma śladów pytanie:

Prelude> :kind (->) 
(->) :: ?? -> ? -> * 

Dlaczego niby zawierać znaki zapytania zamiast tylko gwiazdkami * -> * -> *? Co oznaczają znaki zapytania? Dlaczego inne typy po prostu używają gwiazdek?

Prelude> :kind (,) 
(,) :: * -> * -> * 
+1

IMO, chciałbym, żeby było więcej, gdyby GHC wyświetlał te rozszerzone konteksty, gdyby GHCi otrzymywał specjalną pragmę, ponieważ wprowadzają w błąd początkującego. – fuz

+1

Zobacz także bardziej szczegółowe wyjaśnienie Dona Stewarta [tutaj] (http://stackoverflow.com/questions/3034264/haskell-weird-kinds/3034295#3034295). –

Odpowiedz

16

W ? i ?? rodzaje odnoszą się do rozszerzeń GHC, szczególnie odpakowanych typów. http://hackage.haskell.org/trac/ghc/wiki/IntermediateTypes ma wykres pokazujący relacje pomiędzy ich rodzaju ? (wszystkie możliwe rodzaje), # (bez opakowania rodzaju) ?? (w ramce lub zwykłe Rozpakowanych typów - „przynajmniej górna granica # i *”) (#) (bez opakowania krotki, które mogą tylko być używane w niewielkiej liczbie kontekstów). (Typ standardowy: * odnosi się do normalnych typów pudełkowych.)