2014-03-27 204 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' –