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?
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
@Dylan: La versione più recente di GHC è 7.6.3 meno di due settimane fa, e non è ancora in là. – hammar
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