我有以下内容:
{-# 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
实例,但实际上事情比这更复杂,那将是相当痛苦的。
有没有一种简单、优雅的方法来保证类型族实例本身就是某些类的实例?