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

时间:2014-07-05 05:12:39

标签: haskell types

我有数据类型:

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实例?

1 个答案:

答案 0 :(得分:14)

没关系,你的语法有点错误:

instance (Show a) => Show (Posn a) where
    show = showPosn

顺便说一下,这不是GADT,而是常规的代数数据类型。