2013-05-02 2 views
9

Su the Haskell wiki page for Type Families, v'è il seguente elenco di esempi:Tipo Famiglie estensione non funziona come descritto

type family F a :: * 
type instance F [Int]    = Int   -- OK! 
type instance F String    = Char  -- OK! 
type instance F (F a)    = a   -- WRONG: type parameter mentions a type family 
type instance F (forall a. (a, b)) = b   -- WRONG: a forall type appears in a type parameter 
type instance F Float    = forall a.a -- WRONG: right-hand side may not be a forall type 
type instance where        -- OK! 
    F (Maybe Int) = Int 
    F (Maybe Bool) = Bool 
    F (Maybe a) = String 
type instance where   -- WRONG: conflicts with earlier instances (see below) 
    F Int = Float 
    F a = [a] 

type family G a b :: * -> * 
type instance G Int   = (,)  -- WRONG: must be two type parameters 
type instance G Int Char Float = Double -- WRONG: must be two type parameters 

Ciò dimostra che type instance where è sintassi valida sotto questa estensione. Tuttavia il seguente codice non viene compilato per me con GHC 7.4.2:

{-# LANGUAGE TypeFamilies #-} 

type family F a :: * 
type instance where 
    F (Maybe Int) = Int 
    F (Maybe Bool) = Bool 
    F (Maybe a) = String 

Il messaggio di errore è:

test.hs: 4: 15: Errore di analisi sull'ingresso `dove'

Poiché si tratta di un errore di analisi, sembra che che la sintassi non è supportato, quindi mi sto perdendo un'estensione requisito, o è un'altra cosa che non va?

risposta

13

Questo sembra essere un caso di documentazione prematuro. Secondo this blog post, questa sintassi è parte di una caratteristica recentemente aggiunto al GHC testa, ma non è ancora valido in qualsiasi versione rilasciata di GHC.

+1

Sembra che non sia la documentazione prematuro - è stato in GHC dal gennaio 2013. E 'solo che l'ultima release della piattaforma Haskell (che è dove la mia copia di GHC è da) fornisce solo la versione di giugno 2012 GHC. Dovrò semplicemente aggiornare il mio GHC allora. Sarebbe bello se il wiki avesse le caratteristiche che descrive. – Dylan

+0

@Dylan: La versione più recente di GHC è 7.6.3 meno di due settimane fa, e non è ancora in là. – hammar

+0

Ah, ho ingenuamente assunto dalla data del post sul blog che la funzionalità sarebbe quindi passata alla versione successiva. Qualche idea sul perché non è ancora ufficiale? Sembra una funzionalità estremamente utile. – Dylan