Haskell:实例化代数类型的显示

jep*_*ugs 1 haskell types

我有数据类型:

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,而是常规的代数数据类型.