2014-03-27 176 views
3

想象我有许多领域的数据记录:隐藏字段

data DataRecord = DataRecord { 
    field1 :: String, 
    field2 :: String, 
    ... 
} deriving (Show) 

是否有可能隐藏从deriving (Show)某些领域还是有实现我自己show功能DataRecord

原因我的问题:当我有cyclic dependencies两者之间的数据记录都使用deriving (Show)show功能会产生无限的字符串。

+3

除了开发人员调试使用,您可能需要一个Pretty实例而不是show实例。无论哪种方式,手写实例都是您的解决方案。 –

+0

我有这种情况,我只是需要''show''函数用于调试目的(例如错误信息中的''error''函数)。 –

+0

@ ThomasM.DuBuisson:你可以写一个简短的答案,手写实例是唯一的解决方案,这样我就可以接受它(所以这个问题不会得到答复;-)) –

回答

5

Haskell 2010 report提到您的循环依赖为不适宜情况:

派生ReadShow情况下,可能不适合某些用途。一些问题包括:

  • 圆形结构不能被这些实例打印或读取。

所以你需要手工指定实例。

+0

而且,BTW,Show是一个常规类,因此手动编写实例就像删除“派生Show”并写入'instance Show DataRecord where show dr =“DR”++ field1 dr' –