2013-04-09 12 views
10

ja przypadkowo odkrył, że po to doskonale kompilacji kodu:Dlaczego klasy mogą być używane jako parametry typu i po co?

class SomeClass a 

someValue :: Maybe (SomeClass a) 
someValue = undefined 

jestem przyzwyczajony tylko do oglądania zajęcia z ograniczeniami typu, więc nie rozumiem, dlaczego ten kod typechecks i co jest celem używając klas w ten sposób.

Jestem na GHC 7.6.2.

+0

Czy masz włączone rozszerzenia GHC? Przy włączonych rodzajach ograniczeń oczekuję, że pojawi się niezgodność rodzajowa, tj. 'Maybe :: * -> *' vs 'SomeClass :: * -> Constraint'. Klasy i typy dzielą tę samą przestrzeń nazw, jeśli pamięć mi służy, a to jest w najlepszym wypadku błąd, więc nie jestem pewien, dlaczego byłaby akceptowana przez kompilator. –

+0

@ C.A.McCann Nr Brak. Po prostu zwykłe 'runghc' pliku z zawartością jak w pytaniu. –

+0

Z ciekawości, co się stanie, jeśli zastąpisz słowo "undefined'" słowem "Nic"? –

Odpowiedz

11

Jest to błąd w ghc-7.6.2. Powinien to być miły błąd. Proszę zgłoś to.

+4

Okazuje się, że jest już naprawiony: http://hackage.haskell.org/trac/ghc/ticket/7825 #comment:1 –

3

Błąd.

A.hs: 3: 21: Klasa `SomeClass' używany jako typ

In the type signature for `someValue': 
+0

Zapomniałem wspomnieć. Jestem na GHC 7.6.2 –

Powiązane problemy