Haskell 将NominalDiffTime转换为Real

Haskell 将NominalDiffTime转换为Real,haskell,Haskell,在的文档中,我看到: 转换函数将其视为秒。它的精度为10^-12秒 什么函数将把NominalDiffTime转换为双精度?运气不好您需要更加注意该类型的实例列表。列出的实例之一是Real-NominalDiffTime。这允许您使用realToFrac::(实a,分数b)::a->b转换为Double,因为Double是分数的一个实例 由于NominalDiffTime有一个Real实例,而Double有一个fractive实例,因此您可以使用realToFrac就像它有类型签名Nominal

在的文档中,我看到:

转换函数将其视为秒。它的精度为10^-12秒


什么函数将把
NominalDiffTime
转换为
双精度
?运气不好

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

由于
NominalDiffTime
有一个
Real
实例,而
Double
有一个
fractive
实例,因此您可以使用
realToFrac
就像它有类型签名
NominalDiffTime->Double
一样。当然,
realToFrac
更具多态性,因此您可能需要给它一些提示,确切地告诉它您有时想要转换什么类型。但是,如果它能够找出类型,它当然能够进行这种转换。

,只需要使签名更通用一点。在这种情况下,您知道这两种类型都近似于实数,所以这就是我要搜索的。诚然,在这种情况下,这需要一些类似的东西:同样合理的
(realfoat,realfoat b)=>a->b
查询不会在第二个位置为您提供正确的
realToFrac

但总是值得尝试一些更通用的方法来定义您需要的函数。通常,如果某个类型有标准类的实例,那么该模块也不会为导出相同功能的专门版本而费心


realToFrac
尤其是在数字转换方面非常常见的一个笑话,可能仅次于
from integral
。(虽然,老实说,我不太喜欢这个函数,因为从数学上来说,“将实数转换为分数”,但哦,好吧…

因为
time-1.9.1
可以使用from
Data.time.Clock
模块:

nominalDiffTimeToSeconds :: NominalDiffTime -> Pico

Get the seconds in a NominalDiffTime.

你能解释一下为什么在这里使用
分数型
,以及如何将其转换为
双精度
?这可能是基本的东西…
fractal
只是一个类型类。不存在“将
分数
转换为
双精度
”,因为它们甚至不是同一类东西
Double
是一种类型<代码>分数
是类型可以具有的属性。这有点像问你如何让一匹马变成跑步。跑马是马可以做的事情,但跑马并不会停止。@Carl,问一个
分数a=>a->Double
类型的函数是否存在,这将是从分数到双精度的转换。不要把它看作是转换实数,而是沿着实数轴转换一些数字。:)但我同意,哈斯克尔的转换并不好。