将NominalDiffTime转换为Real

时间:2013-12-22 18:14:32

标签: haskell

Data.Time.Clock的文档中,我看到了这一点:

  

转换功能会将其视为秒。它的精度为10 ^ -12 s

什么功能会将NominalDiffTime变成Double?没有运气hoogling it

3 个答案:

答案 0 :(得分:14)

您需要更加关注该类型的实例列表。其中一个列出的实例是Real NominalDiffTime。这允许您使用realToFrac :: (Real a, Fractional b) :: a -> b转换为Double,因为DoubleFractional的实例。

由于NominalDiffTimeReal个实例,而DoubleFractional个实例,因此您可以使用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.