除去实例Show中的多态类型的show String

时间:2019-03-11 14:37:31

标签: haskell

我的类型有点data T a = T a

我想为此类型声明Show实例,例如

instance Show a => Show (T a) where
  show (T smth) = ... ++ show smth

但是如果show smtha,我不想致电String,因为我不需要其他引号

有什么办法可以声明这样的实例吗?

预先感谢

1 个答案:

答案 0 :(得分:0)

如果您要为Show声明T String的实例,则可以使用FlexibleInstances

{-# LANGUAGE FlexibleInstances #-}

data T a = T a

instance Show (T String) where
  show (T smth) = smth

然后,您需要为要支持的其他a提供显式实例。


如果您也想保留问题中显示的全部实例,那么您将可以使用OVERLAPS/OVERLAPPABLE

{-# LANGUAGE FlexibleInstances #-}

data T a = T a

instance {-# OVERLAPPABLE #-} Show a => Show (T a) where
    show (T smth) = show smth

instance {-# OVERLAPPING #-} Show (T String) where
    show (T smth) = smth