我正在做一些CS作业,这是我与Haskell的第一次经历,所以我有一个问题。在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是真的还是假的新功能,然后返回日期。 类似的东西:
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
我该怎么做?
你没有了'如果需要..然后在'testdate'的定义中返回True else False。 1&lt;&lt; && && && y&gt; = 0'表达式自己评估为“真”或“假”,所以你的函数可以是这样的。 – jwodder
另外,当你比较两件事情时,你使用'=='而不是'='的等号运算符。你也在比较一个函数和Bool,这是没有意义的(因为在它不检查类型)。你可能打算做'testdate(Date m d y)== True'。 – Emil
函数'testDate'具有错误的类型:声明返回'Maybe Date',但实际返回'Bool'。你需要给它正确的类型(或者完全省略这个类型让haskell为你推断)才能使用它。 – amalloy