为什么Haskell prelude 的atan2 函数定义在RealFloat class 中?

Why is the Haskell prelude's atan2 function defined in the RealFloat class?

为什么 atan2RealFloat class 的一部分而不是(有点奇怪的命名)Floating class 的一部分?

我不明白它在逻辑上如何依赖于 Real(我理解为非抽象数字的 class,因为它们可以被转换对自己的一些 Rational 近似值)。

我也不明白为什么它与 RealFloat 的任何其他成员有关,这些成员与打包和解包 exponent/mantissa 表示有关。

(潜在的亲密选民:我不只是在抱怨 Haskell 数字塔。我真的认为这个问题有答案,我只是把注意力放在了错误的地方才看到它。 )

我想它会来自如何处理复数。 atan2 函数适用于 (x, y) 坐标,但这不适用于复数值,因为两个复数值代表与 4 个实数值相同的信息量。 atan2 对于复数没有任何意义,但 atan 肯定有。由于 atan2 对于任何处理角度的程序来说都是一个非常重要的函数,它在 RealFloat 中的位置很可能是由于实用性而不是纯数学。