1

试图学习 Haskell 并偶然发现了这一点:

Prelude> import Data.Semigroup
Prelude Data.Semigroup> let x = Sum 0.1 <> Sum 0.2 <> Sum 0.3
Prelude Data.Semigroup> let y = (Sum 0.1 <> Sum 0.2) <> Sum 0.3
Prelude Data.Semigroup> x == y
False

显然,这是浮点算术的正常误差,但是为什么浮点值Num的实例或者instance Num a => Semigroup (Sum a)如果关联性不成立,为什么会有实例?是否有任何其他领域的类型系统的保证不能保证人们应该注意?除了固定宽度的数值?

4

0 回答 0