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