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.
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. –
@ C.A.McCann No. Nessuno. Solo un semplice 'runghc' di un file con i contenuti come nella domanda. –
Per curiosità, cosa succede se si sostituisce 'undefined' con' Nothing'? –