ho qualcosa di simile alla seguente:garanzia che le famiglie di tipo deriveranno alcune classi
{-# LANGUAGE TypeFamilies #-}
class Configuration c where
data Pig c
data Cow c
parsePig :: GenParser Char st (Pig c)
parseCow :: GenParser Char st (Cow c)
data Farm c =
{ pigs :: [Pig c]
, cows :: [Cow c]
} deriving Show
Questo non riesce a causa della linea deriving Show
. Non so come forzare tutte le istanze Configuration
per garantire che le relative implementazioni data Pig
e data Cow
siano tutte istanze di Show
.
So che potrei farlo hanno showPig
e showCow
metodi e la scrittura l'intero complesso show
esempio, ma in realtà le cose sono più complesse di questo e che sarebbe piuttosto un dolore.
Esiste un modo semplice ed elegante per garantire che le istanze della famiglia tipo siano esse stesse istanze di determinate classi?
Non fallisce a causa della linea 'LANGAUGE'? –
Questo non è l'intero file; L'ho ridotto per gli scopi di questa domanda. Ovviamente c'è una dichiarazione del modulo, un'importazione ParserCombinators.Parsec e così via. – So8res
Penso che Matt abbia inteso il fatto che la riga indica 'LANGAUGE' mentre dovrebbe essere' LANGUAGE'. –