2016-03-20 7 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月」、...、「7月」Haskellのショーデータ

+2

あなたが尋ねていることは不明です - あなたの 'Show'インスタンスの助けが必要なのですか?間違ってインデントされていて、' show ... 'の前に少なくとも2つのスペースを入れてください。 'print January 'や' putStrLn $ show January'を使ってください。 – epsilonhalbe

+1

私はあなたのデータ型を 'Month'と呼んでいます - 複数形は通常、物のリストを示しています(これはちょうどコンベンションです) 。 1月ショーの代わりに – epsilonhalbe

答えて

1

Showが自動的に導出することができます?

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

そしてそう:私はあなたがあなたのShowインスタンスを表示する十分な理由があるかもしれないと仮定し

λ> show January 
"January" 

これらは月の名前を省略していますが、データコンストラクタの名前を一致させるだけではどうですか?

+0

、私はショーの月を書くとき、それらはすべて表示されるようにすることができますか? @mdunsmuir – benjy1911

+0

@ benjy1911 'show [January .. July]'を使ってください。 'Enum'インスタンスは、すべての月を順番に生成することを可能にします。 – user2407038

+0

また、より多くの月が後で追加された場合に備えて、 'Bounded'と' show [minBound .. maxBound] 'を導き出す方が良いでしょう。 – Ingo