如何在Haskell中表示时间间隔?

如何在Haskell中表示时间间隔?,haskell,time,Haskell,Time,我试图生成一系列定期分隔的日期,例如,从现在开始,我希望生成以下列表: [now, now + 10 minutes, now + 20 minutes, now + 30 minutes, ...] 我的函数将基于iterate并有两个参数,start和interval,但这些参数的类型应该是什么?我一直在图书馆和维基上徘徊,但没有成功。似乎建议使用Data.time.Clock中的UTCTime对时间进行编码,建议使用NominalDiffTime对时差进行编码,但是如何生成一天的标称时差

我试图生成一系列定期分隔的日期,例如,从现在开始,我希望生成以下列表:

[now, now + 10 minutes, now + 20 minutes, now + 30 minutes, ...]
我的函数将基于
iterate
并有两个参数,
start
interval
,但这些参数的类型应该是什么?我一直在图书馆和维基上徘徊,但没有成功。似乎建议使用
Data.time.Clock
中的
UTCTime
对时间进行编码,建议使用
NominalDiffTime
对时差进行编码,但是如何生成一天的标称时差呢?比如说

看来,
时间镜头
软件包提供了实现这一点的方法,但据我所知,镜头是一种提高表现力的方法,如果使用镜头是解决ghci中此问题的唯一方法,我会感到惊讶

Data.Time> now <- getCurrentTime
Data.Time> let tenMinutes = 10*60
Data.Time> mapM_ print . take 10 . iterate (addUTCTime tenMinutes) $ now 
2015-06-27 20:14:21.445443 UTC
2015-06-27 20:24:21.445443 UTC
2015-06-27 20:34:21.445443 UTC
2015-06-27 20:44:21.445443 UTC
2015-06-27 20:54:21.445443 UTC
2015-06-27 21:04:21.445443 UTC
2015-06-27 21:14:21.445443 UTC
2015-06-27 21:24:21.445443 UTC
2015-06-27 21:34:21.445443 UTC
2015-06-27 21:44:21.445443 UTC

这也让我感到困惑。请注意,
NominalDiffTime
Num
的一个实例,这意味着它支持数字文本。例如,
1::NominalDiffTime
。不知道这意味着什么,但这可能足以让你开始。谢谢。如果我错了,请更正:这在文档中不可见,因此应该查看源代码,对吗?@danza在类型的文档下,列出了它作为实例的类,包括
Num
,因此此信息确实在生成的haddock中。(人类编写的)文档还说,“转换函数会将其视为秒。”谢谢!现在我更好地理解了如何阅读实例部分@danza我不太清楚(为了便于搜索,保留这个名字可能没问题;其他人可能会使用相同的术语)。事实上,“时间间隔”似乎是很常见的用法,只是浏览维基百科,所以我想我收回我的评论哈哈。如果能有好的术语来谈论这类事情,那就太好了
import Data.Time.Clock

timeSeq :: UTCTime -> NominalDiffTime -> [UTCTime]
timeSeq start interval = iterate (addUTCTime delta) start