Haskell 的 Num 类允许非常通用的代数结构,并且看起来它旨在用于制作环。不过,当谈到环时,能够明确提及它的附加和乘法单位(可能是 Num.Zero 和 Num.One)很方便,Num 是否存在这样的东西,另一个包含单位的类或其他方式完毕?
问问题
357 次
2 回答
17
如果您的实例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
编辑:由于 Z 在 Ring 中是初始的,因此使用fromInteger
这种方式的想法实际上很有意义。
于 2013-05-20T19:52:30.643 回答
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
.
于 2013-05-20T22:12:24.883 回答