我有数据类型:
data Posn a = Posn Int Int a
我想为它创建一个自定义的Show实例,它将两个Int显示为有序对,如下所示:
showPosn :: Show a => Posn a -> String
showPosn (Posn l c x) = show (l,c) ++ (' ' : show x)
我试过了:
instance Show (Show a => Posn a) where
show = showPosn
但这给了我错误"非法实例声明"。
令人沮丧的是deriving Show
工作得很好。所以,我的问题是:我需要做什么才能获得我的Show实例?
答案 0 :(得分:14)
没关系,你的语法有点错误:
instance (Show a) => Show (Posn a) where
show = showPosn
顺便说一下,这不是GADT,而是常规的代数数据类型。