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

时间:2013-05-20 19:48:30

标签: haskell zero

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

2 个答案:

答案 0 :(得分:16)

如果您的Num实例是一个响铃,那么我们希望fromInteger成为一个环同态,因此01才能正常工作。这可能并不总是成立。 Num早于具有代数定律的类型组是常态。另外,不幸的是,Num的许多实例都不是环(例如浮点数)。

Num实际上不是一个环形结构,因为它还有“其他内容”,如abssignum和(希望)环同态fromInteger。我倾向于将其视为“可能与其他一些东西结合在一起。”

示例:Gaussian rationals

的响铃
import Data.Ratio
import Data.Complex

type GaussianRational = Complex Rational

zero :: GaussianRational 
zero = 0

one :: GaussianRational
one = 1

编辑:由于Z在Ring中是初始的,因此以这种方式使用fromInteger的想法实际上很有意义。

答案 1 :(得分:4)

整个algebra包专门用于这些目的。例如,我们有

class (Rig r, Rng r) => Ring r

和支持演员

class (Semiring r, Unital r, Monoidal r) => Rig r
class (Group r, Semiring r) => Rng r
class Multiplicative r => Unital r
class (Additive r, Abelian r, Multiplicative r) => Semiring r
class (LeftModule Integer r, RightModule Integer r, Monoidal r) => Group r
class (LeftModule Natural m, RightModule Natural m) => Monoidal m
class (Semiring r, Additive m) => RightModule r m
class (Semiring r, Additive m) => LeftModule r m
class Multiplicative r
class Additive r
class Additive r => Abelian r

这至少是建立戒指的一种方式。如果您正在进行高度通用的代数,那么algebra可能是值得的,但大多数图书馆只是期望Num