【发布时间】:2012-09-13 18:35:00
【问题描述】:
我有类似以下的内容:
{-# 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 实例,但实际上事情比这更复杂,那会很痛苦。
是否有一种简单、优雅的方式来保证类型族实例本身就是某些类的实例?
【问题讨论】:
-
它不会因为
LANGAUGE行而失败? -
这不是整个文件;为了这个问题,我把它删减了。显然有一个模块声明、一个 ParserCombinators.Parsec 导入等等。
-
我认为马特的意思是该行声明
LANGAUGE而它应该是LANGUAGE。
标签: haskell type-families