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

时间:2015-11-06 10:14:11

标签: haskell

Haskell RealFloat类型类有一个名为isIEEE的函数,根据documentation,如果参数是IEEE浮点数,则给出'True(并且,可以想象) ,否则为假。)

但这是isIEEE的{​​{1}}的实施:

Float

这是instance RealFloat Float where ... isIEEE _ = True 的实现:

Double

如果instance RealFloat Double where ... isIEEE _ = True 总是无条件地isIEEE,为什么要使用它?为什么要在Prelude中呢?

1 个答案:

答案 0 :(得分:7)

在评论中提及leftaroundaboutKoterpillar时,可以定义自己的RealFloat实例。这些定制浮动类型不一定必须遵循IEEE标准。

instance RealFloat MyFloat where
  isIEEE _ = False
  ...

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

  

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

     

Haskell 98 Report, 6.4.6