检查Haskell中的函数

时间:2015-09-16 17:52:23

标签: haskell

我正在做一些CS家庭作业,这是我第一次使用Haskell,所以我有一个问题。

我已宣布数据类型

data Date = Date Int Int Int deriving (Show)

我有这个功能testdate:

testdate :: Date -> Maybe Date
testdate (Date m d y) = if 1 <= m && m <= 12 && 1 <= d && d <= 31 && y >= 0
    then
        True
    else
        False

我想创建一个新函数来检查testdate是true还是false,然后返回给你日期。 类似的东西:

betterdate :: Date -> Maybe Date
betterdate (Date m d y) if (testdate = True) //I know this part doesn't work
     then Just (Date m d y) 
     else Nothing

我该怎么做?

1 个答案:

答案 0 :(得分:5)

您想将日期传递给testdate功能。这应该有效:

betterdate d = if testdate d
    then Just d
    else Nothing

如果您真的要在参数列表中解压缩Date,那么您可以这样做以避免重复(Date m d y)无处不在:

betterdate date@(Date m d y) = if testdate date
    then Just date
    else Nothing