Mam coś jak następuje:gwarancji, że rodziny typu będą czerpać pewne klasy
{-# 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
to się nie powiedzie z powodu linii deriving Show
. Nie wiem, jak wymusić wszystkie instancje Configuration
, aby zapewnić, że ich implementacje data Pig
i data Cow
są instancjami Show
.
Wiem, że mógłbym zrobić to mieć showPig
i showCow
metod i napisać cały kompleks show
przykład, ale w rzeczywistości sprawy są bardziej skomplikowane niż to i to byłoby dość uciążliwe.
Czy istnieje prosty, elegancki sposób na zagwarantowanie, że instancje rodzinne typu będą same instancjami niektórych klas?
Nie zawiedzie z powodu linii 'LANGAUGE'? –
To nie jest cały plik; Zmniejszyłem to dla celów tego pytania. Oczywiście istnieje deklaracja modułu, importowanie ParserCombinators.Parsec i tak dalej. – So8res
Myślę, że Matt miał na myśli fakt, że linia określa 'LANGAUGE', podczas gdy powinno być' LANGUAGE'. –