2016-03-20 4 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" 
.... 

Что мне нужно сделать, чтобы показать результат, как, например: «Ян», «Февраль», ..., «Июль»Haskell показывают данные

+2

Непонятно, что вы спрашиваете - вам нужна помощь с экземпляром 'Show' - с неправильным отступом используйте как минимум 2 пробела перед каждым« show ... »; если вы имеете в виду, как печатать его в командной строке - используйте 'print January' или' 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

Или, еще лучше, выведите также «Ограниченные» и 'show [minBound .. maxBound]', на всякий случай добавьте больше месяцев. – Ingo

Смежные вопросы