我在编写的模块中有一个功能,需要将特定自定义数据中的年份与当前年份进行比较。
removeOld :: Publication -> Bool
removeOld (PubE (y) s s' _) = if y > 1999 then True else False
此功能与过滤器一起使用以删除不需要的数据。就我而言,所有出版物都超过5年。 我知道当前日期的函数总是返回一个" IO类型",但在这种情况下,这个函数没有副作用,如果有机会比较当前年份,我就会徘徊数据中的年份。
我希望该功能看起来像
removeOld :: Publication -> Bool
removeOld (PubE (y) s s' _) = if (currentYear - y) < 5 then True else False
感谢您的时间。
答案 0 :(得分:1)
您可以将currentYear
作为参数添加到removeOld
功能中。
像下面的代码一样发现
removeOld :: Int -> Publication -> Bool
removeOld currentYear (PubE (y) s s' _) = (y > currentYear)
然后您可以将代码用作
removeOld 1999
这是第一个例子。
编辑:问题有所改变......
要获取当前日期,请使用以下代码(您需要包含Data.Time.Calendar
和Data.Time.Clock
):
do
now <- getCurrentTime
let (year, month, day) = toGregorian $ utctDay now
然后,您可以在函数中使用year
,或使用函数中的上述代码。