haskell의 Num 클래스는 매우 일반적인 대수 구조를 허용하며 링을 만드는 데 사용되는 것처럼 보입니다. 링을 말할 때, 아마도 Num.Zero와 Num.One 일 것입니다. Num과 같은 유닛이있을 것입니다. 유닛이나 다른 방법을 포함하는 또 다른 클래스입니다. 끝난? Num
의 인스턴스가 링 인 경우Num 또는 Rational의 haskell 링에 대한 단위
10
A
답변
16
, 하나는 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는 링에서 초기이기 때문에, fromInteger
를 사용하는 아이디어는이 방법은 실제로 많은 이해된다.
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
을 기대합니다.
좋은 제안입니다. - 하나가 fromInteger 0이 0을 반환하고, 1 Integer가 1을 반환하면 상관 없습니다. – simonize
@imimize 숫자 리터럴 '1'은 이미'fromIntegral 1'입니다. – AndrewC