10

haskell の Num クラスは、非常に一般的な代数構造を可能にし、リングを作成するために使用されることを意図しているように見えます。ただし、リングについて話すときは、追加の乗法単位 (おそらく Num.Zero と Num.One) を明示的に言及できると便利です。Num、単位を含む別のクラス、またはこれが終わり?

4

2 に答える 2

17

のインスタンスが環である場合、環準同型であるとNum予想されるため、 とが機能します。これは常に成り立つとは限りません。 代数法則を標準とする型クラスよりも前から存在します。また、残念なことに、 の多くのインスタンスはリングではありません (浮動小数点数など)。fromInteger01NumNum

Numabsは実際には環構造ではありません。これは、のような「他のもの」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

これは、リングを構築するための少なくとも 1 つの方法です。非常に一般的な代数を行っている場合はalgebra、それだけの価値があるかもしれませんが、ほとんどのライブラリはNum.

于 2013-05-20T22:12:24.883 に答える