2016-11-16 81 views
2

我定義這個數據data MonthData = Jan | Feb | Mar | Apr | May | Jun | Jul | Aug | Sep | Oct | Nov | Dec deriving (Eq, Show, Enum, Ord)訪問「數據」的下一個元素

我如何隱含訪問一個元素賦予其前一個?

舉例來說,我有一個,我想訪問沒有明確鍵入二月

乾杯

回答

9

你問的編譯器來推斷Enum實例,因此

>>> :t succ 
succ :: Enum a => a -> a 
>>> succ Jan 
Feb 

但是請注意

>>> succ Dec 
*** Exception: succ{MonthData}: tried to take `succ' of last tag in enumeration 
+3

相關:http://stackoverflow.com/questions/5684049/is-there-some-way-to-define-an-enum-in-haskell-that-wraps-around。也許可以將Neil Brown的解決方案從該主題添加爲「nextMonth」。 – jpath