我有以下内容:
{-# 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
deriving Show由于这条线,这失败了。我不知道如何强制所有Configuration实例确保它们data Pig和data Cow实现都是Show.
我知道我可以让它拥有showPig和showCow方法并写出整个复杂的show实例,但实际上事情比这更复杂,那将是相当痛苦的。
有没有一种简单、优雅的方法来保证类型族实例本身就是某些类的实例?