使用时间库(时间-1.5),我有一个常数,例如1秒。我没有看到创建NominalDiffTime的方法,所以我创建了一个DiffTime:
twoSeconds = secondsToDiffTime 2
现在我想与UTCTime互动:
now <- getCurrentTime
let twoSecondsAgo = addUTCTime (-twoSeconds) now
当然,不会对类型进行检查,因为addUTCTime期望参数1中的NominalDiffTime并且我已经传递了DiffTime。如何在两种类型之间进行转换?或者我如何创建2秒的NominalDiffTime?
答案 0 :(得分:15)
NominalDiffTime
和DiffTime
都有RealFrac
个实例,因此包含Fractional
和Real
个实例。
您可以通过
将其中任何一个转换为另一个fromRational . toRational
哪个类型为(Real a, Fractional c) => a -> c
。这是一件非常常见的事情,并在standard prelude中提供。
realToFrac :: (Real a, Fractional b) => a -> b
realToFrac = fromRational . toRational
DiffTime
和NominalDiffTime
都有Num
和Fractional
个实例。这意味着您可以使用integer and floating literals代替其中任何一个。所有以下工作都没有任何额外的仪式。
addUTCTime (-2)
addUTCTime 600
addUTCTime 0.5
答案 1 :(得分:13)
由于NominalDiffTime
是Num
的实例,您可以使用fromInteger
创建它。
>>> fromInteger 1 :: NominalDiffTime
1s