2013-12-22 21 views

回答

14

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

由于NominalDiffTimeReal实例,DoubleFractional例如,你可以使用realToFrac,好像有类型签名NominalDiffTime -> Double。当然,realToFrac比这个更具多态性,因此您可能需要提示它有时需要转换的类型。但是,如果能够确定类型,它肯定能够进行这种转换。

+0

你能解释为什么'Fractional'在这里是合适的,以及如何将其转换为'Double'?这可能是基本的东西... – Cuadue

+3

'分数'只是一个类型的类。没有“将分数”转换为“双”,因为它们甚至不是同一类的东西。 'Double'是一种类型。 '分数'是一种类型可以拥有的财产。这有点像问你如何转换一匹马来跑步。跑步是一匹马可以做的事,但它不会停止成为一匹马。 – Carl

+1

@Carl,询问是否存在'Fractional a => a - > Double'类型的函数是非常有意义的,这将是一个从小数到双精度的转换。 – Turion

4

You can hoogle it allright,只需要使签名更通用一点。在这种情况下,你知道两种类型的近似实数,所以这就是我要搜索的。诚然,这将需要一些像在这种情况下:同样合理的(RealFloat a, RealFloat b) => a -> b查询不会给你正确的realToFrac在第二点。

但总是值得尝试一些更通用的方法来定义您需要的功能。通常,如果某种类型具有标准类的实例,那么该模块不会为了输出相同功能的专用版本而烦恼很多。

realToFrac尤其是一种小丑,它经常用于数字转换,也许在fromIntegral之后第二常见。 (虽然,老实说,我不太喜欢这个功能,因为在数学上,“将实数转换成分数”is pretty horrible,但是哦...)

+0

不要把它看作是转换一个真实的,而是把一些数字转换成真正的轴。 :)但我同意,Haskell转换不好。 – augustss