【发布时间】:2015-06-03 12:16:19
【问题描述】:
我想用 Haskell 创建一种新类型的数据并创建相关的Show 实例。我需要使用除 , 之外的另一个分隔符创建元组 Show 实例。
我实现了这段代码(使用{-# LANGUAGE FlexibleInstances #-} pragma):
newtype Data = Data Double
instance Show Data where
show (Data dat) = show dat
instance Show (Data,Data) where
show (Data d1,Data d2) = show d1++" "++show d2
instance Show (Data,Data,Data) where
show (Data d1,Data d2,Data d3) = show d1++" "++show d2++" "++show d3
是否可以在不手动创建实例的情况下将 Show 实例自动扩展到任意大小的元组?
注意:我知道我可以使用concat $ intersperse " " ... 在列表元素之间插入内容。但出于许多原因,我希望使用元组而不是列表。
【问题讨论】:
-
没有。至少不是以一种简单的方式。但是您可以只更改元组的
show实例的输出:rewrite ('(':xs) = replace "," " " $ init xs其中replace来自Data.String.Utils。 -
如果你可以使用像
(1,('a',"b"))这样的嵌套元组,它应该是直截了当的;) -
听起来你在寻找一个漂亮的打印库。看看黑客攻击;有几个不错的(有细微的差别)。