2013-04-09 15 views
10

Ho scoperto per caso che il seguente è un codice perfettamente compilazione:Perché le classi possono essere utilizzate come parametri di tipo e per cosa?

class SomeClass a 

someValue :: Maybe (SomeClass a) 
someValue = undefined 

io sono abituato a vedere solo le classi di vincoli di tipo, quindi non capisco perché questo typechecks codice e qual è lo scopo di usando le classi in questo modo.

Sono su GHC 7.6.2.

+0

Avete delle estensioni GHC attivate? Con i tipi di vincoli attivati, prevedo che si otterrebbe un disallineamento di tipo, ad esempio 'Maybe :: * -> *' vs 'SomeClass :: * -> Constraint'. Classi e tipi condividono lo stesso spazio dei nomi se la memoria mi serve, e questo è un errore gentile nel migliore dei casi, quindi non sono sicuro del motivo per cui sarebbe accettato dal compilatore. –

+0

@ C.A.McCann No. Nessuno. Solo un semplice 'runghc' di un file con i contenuti come nella domanda. –

+0

Per curiosità, cosa succede se si sostituisce 'undefined' con' Nothing'? –

risposta

11

Si tratta di un bug in GHC-7.6.2. Dovrebbe essere un errore gentile. Per favore segnalalo.

+4

Risulta essere già stato risolto: http://hackage.haskell.org/trac/ghc/ticket/7825#comment:1 –

3

Errore.

A.hs: 3: 21: classe `SomeClass' usato come un tipo

In the type signature for `someValue': 
+0

Hai dimenticato di menzionare. Sono su GHC 7.6.2 –

Problemi correlati