如果Haskell总是评估为True,为什么它有isIEEE?

Wan*_*uta 9 haskell

Haskell RealFloat类型类有一个函数isIEEE,根据文档,它给出'如果参数是一个IEEE浮点数,则为True'(并且,可以想象,否则为False).

但是这里是isIEEEfor 的实现Float:

instance RealFloat Float where
  ...
  isIEEE _ = True
Run Code Online (Sandbox Code Playgroud)

以下是实施Double:

instance RealFloat Double where
  ...
  isIEEE _ = True
Run Code Online (Sandbox Code Playgroud)

如果isIEEE总是无条件的True,为什么要使用它?为什么要在Prelude中呢?

Wan*_*uta 7

正如左下角Koterpillar在评论中提到的那样,可以定义自己的RealFloat实例.这些定制浮动类型不一定必须遵循IEEE标准.

instance RealFloat MyFloat where
  isIEEE _ = False
  ...
Run Code Online (Sandbox Code Playgroud)

此外,如果您的浮点类型不是IEEE,则​​允许所有RealFloat谓词返回False:

(...)函数是NaN,isInfinite,isDenormalized,isNegativeZero,isIEEE是使用IEEE标准表示的所有支持号.对于非IEEE浮点数,这些可能都返回false.

Haskell 98报告,6.4.6