在Data.Time.Clock的文档中,我看到了这一点:
转换功能会将其视为秒。它的精度为10 ^ -12 s
什么功能会将NominalDiffTime
变成Double
?没有运气hoogling it
答案 0 :(得分:14)
您需要更加关注该类型的实例列表。其中一个列出的实例是Real NominalDiffTime
。这允许您使用realToFrac :: (Real a, Fractional b) :: a -> b
转换为Double
,因为Double
是Fractional
的实例。
由于NominalDiffTime
有Real
个实例,而Double
有Fractional
个实例,因此您可以使用realToFrac
,就像它具有类型签名{{ 1}}。当然,NominalDiffTime -> Double
比这更具多态性,因此您可能需要准确地给它提示您有时要转换的类型。但如果可以找出类型,它肯定能够进行转换。
答案 1 :(得分:4)
You can hoogle it allright,只需要使签名更通用一点。在这种情况下,您知道两种类型都是近似实数,所以这就是我要搜索的内容。不可否认,在这种情况下,这需要一些:同样合理的(RealFloat a, RealFloat b) => a -> b
查询不会在第二点给你正确的realToFrac
权利。
但是,总是值得尝试一些更通用的方法来定义您需要的功能。通常,如果某些类型具有标准类的实例,那么该模块也不会为了导出相同功能的专用版本而烦恼。
realToFrac
特别是一个小丑,经常用于数字转换,可能是fromIntegral
之后的第二常见。 (虽然,老实说,我不太喜欢这个功能,因为在数学上,“将实数转换为分数”is pretty horrible,但是很好......)
答案 2 :(得分:0)
自time-1.9.1
起,您可以使用Data.Time.Clock
模块中的nominalDiffTimeToSeconds
:
nominalDiffTimeToSeconds :: NominalDiffTime -> Pico
Get the seconds in a NominalDiffTime.