我正在做一些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
我该怎么做?
答案 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