2016-03-20 38 views
0
data Months = January|February|March|April|May|June|July 
     deriving (Eq, Ord, Enum) 
instance Show Months where 

show January="Jan" 
show February="Feb" 
show March="Mar" 
.... 

什麼我需要做的顯示輸出爲這樣的:「一月」,「二月」,......,「七五」哈斯克爾的數據顯示

+2

目前還不清楚你在問什麼 - 你是否需要幫助你的Show實例 - 在每個'show ...'之前,它是錯誤地縮進使用至少2個空格的;如果你的意思是如何在命令行上打印它 - 使用'print 1月'或'putStrLn $ show January' – epsilonhalbe

+1

我也會調用你的數據類型'Month' - 因爲複數通常表示一個事物列表(這只是約定) 。 – epsilonhalbe

回答

1

Show可以自動導出:

data Months = January | February | March | April | May | June | July 
       deriving (Eq, Ord, Enum, Show) 

所以:

λ> show January 
"January" 

我想有可能是您希望Show實例顯示一個很好的理由這些縮寫的月份名稱,但爲什麼不只是改變你的數據構造函數的名稱來匹配?

+0

而不是顯示一月份,我可以擁有它,這樣當我編寫顯示月份時,它們全部顯示? @mdunsmuir – benjy1911

+0

@ benjy1911使用'show [January .. July]'。 'Enum'實例允許您按順序生成所有月份。 – user2407038

+0

或者,更好的是,還可以派生'Bounded'和'show [minBound .. maxBound]',以防萬一以後再增加月份。 – Ingo