Класс Num haskell допускает вполне общие алгебраические структуры и выглядит так, как будто он предназначен для создания колец. Говоря о кольце, однако, удобно уметь четко указывать его дополнительные и мультипликативные единицы - возможно, Num.Zero и Num.One - есть ли такая вещь для Num, другого класса, который включает в себя единицы или какой-либо другой способ, которым это сделано?
Единицы для колец в haskell в Num или Rational
Ответ 1
Если ваш экземпляр 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
EDIT: Поскольку Z является исходным в Ring, идея использования fromInteger
таким образом действительно имеет большой смысл.
Ответ 2
Весь этот пакет 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
.