fromRational
我知道和fromInteger
的存在fromIntegral
。
但是是否有更通用的函数可以将 any 转换Num
为该Double
类型?
我还知道这Num
是一组类型,并且可能存在使用方式的限制。
但这可能吗?
就像是:
fromNum::(Num a) => a -> Double
Run Code Online (Sandbox Code Playgroud)
最好不要安装任何额外的软件包。
绝对没有办法做到这一点,而且有一个很好的理由。Num
是一种通用类型,旨在用于任何模糊的“可加”和“可乘”。您可以非常宽松地将其视为一个环[1]。这意味着向量、点和矩阵之类的东西都是Num
。并且没有合理、规范的方法将 a 转换Matrix a
为 a Double
。
您已经注意到,有多种方法可以Double
从更具体的类型类(例如Integral
.
[1]是的,fromInteger
也在 上Num
。这在很大程度上被认为是一个错误特性,使用矩阵进行操作的库通常只提供一个尴尬的默认实现。