我的类型有点data T a = T a
我想为此类型声明Show
实例,例如
instance Show a => Show (T a) where
show (T smth) = ... ++ show smth
但是如果show smth
是a
,我不想致电String
,因为我不需要其他引号
有什么办法可以声明这样的实例吗?
预先感谢
答案 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