在Num或Rational中的haskell中的环的单位

sim*_*ize 10 haskell zero

Num类的haskell允许非常一般的代数结构,看起来它的目的是用来制作环.当谈到一个戒指时,能够明确地提到它的附加和乘法单位 - 也许是Num.Zero和Num.One - 很方便Num,这是另一个包括单位或其他方式的类,这是做了什么?

Phi*_* JF 16

如果您的实例Num是一个戒指,一个预期fromInteger为环同态,因此01将只是工作.这可能并不总是成立. 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这种方式的想法实际上很有意义.

  • @simonize数字文字"1"已经是"fromIntegral 1". (3认同)