5

我想用类型签名构建一个函数Time t => t -> Bool查看Data.Time的文档时,有几种不同的类型可以按时工作,例如:UTCTimeLocalTimeZonedTime,但我发现没有统一它们的类型类。有没有这样的,或者我应该把时间当作一个Num?(即一个连续体)

4

5 回答 5

8

向量空间包有一个仿射空间类型类

Diff p这里是持续时间类型(应该是 的一个实例VectorSpace),并且p是时间点类型。您需要一个额外的Ord实例进行比较。

这为您免费提供时间点之间的线性插值。

于 2012-07-20T12:27:56.807 回答
3

标准时间库中没有这样的类型类,但是可以自己实现一个。

UTCTime但是,通常您应该以用于所有基于时间的计算的方式构建程序逻辑(这不是 Haskell 特定的)。LocalTime并且ZonedTime应该只用于在 UTC 和向用户显示的演示文稿或来自外部来源的数据之间来回转换。这可能是没有现成的函数来计算本地和分区时间类型的时间差异和时间加法的原因。

于 2012-07-20T12:32:48.837 回答
2

时间有些奇怪。

时间可以指特定的时间瞬间(例如,09:27 AM,公元 1821 年 2 月 14 日),或持续时间(例如,6 分钟)。

增加和减少持续时间是有意义的。在时间上找到两个瞬间的总和是没有意义的。这代表什么?给一个瞬间增加一个持续时间会给你另一个瞬间;这就说得通了。从另一个实例中减去一个实例应该会给您它们之间的持续时间。

总之,时间算术并不像你想象的那么简单。

现在,该time软件包提供了什么?我不知道。听起来你提到的所有时间都是瞬间,而不是持续时间......

于 2012-07-20T12:18:33.517 回答
1

看一下time-lens包中的HasTime类。

它使您可以(读取和写入)访问TimeOfDay所有这些结构的组件。所以,如果你实现你的函数TimeOfDay,它可以很容易地推广到LocalTimeZonedTimeUTCTime

于 2012-07-20T16:22:13.410 回答
0

根据文档(http://www.haskell.org/ghc/docs/7.0.2/html/libraries/time-1.2.0.3/Data-Time-Format.html),所有 UTCTime、ZonedTime 和 LocalTime 都是类型类 FormatTime 和 ParseTime 的实例。它们应该是您正在寻找的东西。

于 2012-07-20T10:59:49.180 回答