数据声明 - 使用3参数

时间:2017-05-18 16:57:47

标签: haskell type-conversion

我现在要使用数据类型,但我知道其他编程语言。 想象“日期”得到(年月日)

当我有

data Month = Jan | Feb | Mar | Apr | May | Jun | Jul | Aug | Sep | Oct | Nov | Dec
data Date = Date Int Month Int

我希望有一个funktion

showDate :: Date -> String

如何从数据类型Date中获取3.参数来创建年份? 或者更好地描述..如何创建带有回报的字符串,例如“2017年5月18日”

在其他语言中,我会为3.参数或日期[0]为1编写日期[2]。

感谢您的帮助!

1 个答案:

答案 0 :(得分:4)

你在Haskell做pattern matching

data Month = Jan | Feb | Mar | Apr | May | Jun | Jul | Aug | Sep | Oct | Nov | Dec deriving (Show)
data Date = Date Int Month Int

showData :: Date -> String
showDate (Date day mon year) = "Date is: " ++ (show day) ++ " " ++ (show mon) ++  " " ++ (show year)

请注意,我使用ShowMonth类型导出了deriving (Show)个实例。您可以手动制作Show这样的实例,而不是自动执行此操作:

instance Show Month where
    show Jan = "January"
    show Feb   = "February"
    .... and so on

演示:

*Main> showDate (Date 3 Feb 2017)
"Date is: 3 Feb 2017"

或者甚至喜欢这样:

data Month = Jan | Feb | Mar | Apr | May | Jun | Jul | Aug | Sep | Oct | Nov | Dec deriving (Show)
data Date = Date Int Month Int deriving (Show)

这将自动派生您的数据类型的Show实例。

*Main> show (Date 3 Feb 2017)
"Date 3 Feb 2017"