Num类的haskell允许非常一般的代数结构,看起来它的目的是用来制作环.当谈到一个戒指时,能够明确地提到它的附加和乘法单位 - 也许是Num.Zero和Num.One - 很方便Num,这是另一个包括单位或其他方式的类,这是做了什么?
Phi*_* JF 16
如果您的实例Num是一个戒指,一个预期fromInteger为环同态,因此0和1将只是工作.这可能并不总是成立. Num在拥有代数定律的类型之前是常态.此外,不幸的是,许多实例Num都不是环(例如浮点数).
Num并不是一个真正的戒指结构,因为它也有"其他东西"之类的abs,signum并且(希望)环同态fromInteger.我倾向于将其视为"可能与其他一些东西相关的东西."
例如:高斯有理数的环
import Data.Ratio
import Data.Complex
type GaussianRational = Complex Rational
zero :: GaussianRational
zero = 0
one :: GaussianRational
one = 1
Run Code Online (Sandbox Code Playgroud)
编辑:由于Z在Ring中是初始的,因此使用fromInteger这种方式的想法实际上很有意义.