在 Haskell 中将 Num 转换为 Double

Otá*_*lva 3 haskell ghc

fromRational我知道和fromInteger的存在fromIntegral
但是是否有更通用的函数可以将 any 转换Num为该Double类型?
我还知道这Num是一组类型,并且可能存在使用方式的限制。
但这可能吗?
就像是:

fromNum::(Num a) => a -> Double
Run Code Online (Sandbox Code Playgroud)

最好不要安装任何额外的软件包。

Sil*_*olo 8

绝对没有办法做到这一点,而且有一个很好的理由。Num是一种通用类型,旨在用于任何模糊的“可加”和“可乘”。您可以非常宽松地将其视为一个[1]。这意味着向量、点和矩阵之类的东西都是Num。并且没有合理、规范的方法将 a 转换Matrix a为 a Double

您已经注意到,有多种方法可以Double从更具体的类型类(例如Integral.


[1]是的,fromInteger也在 上Num。这在很大程度上被认为是一个错误特性,使用矩阵进行操作的库通常只提供一个尴尬的默认实现。

  • @OtávioAugustoSilva `fromReal = fromRational 。到理性`? (2认同)
  • @leftaroundabout 向量空间很棒,是的;我希望更多的人使用它。我认为错误特征并不是具体的“fromInteger”,而是强行将“可以添加以产生相同类型的东西”与“可以相乘以产生相同类型的东西”和“可以在源代码中表示的东西”联系起来代码作为整数文字”。所有这三个概念对于其他一个或两个没有意义的类型都很有用。事后看来,它们都应该是单独的类(可以选择使用像“Num”这样的类来将它们与超类约束结合在一起)。 (2认同)