Класс Num класса haskell позволяет использовать довольно общие алгебраические структуры и выглядит так, как будто он предназначен для изготовления колец. Говоря о кольце, однако, удобно иметь возможность явно указывать его дополнительные и мультипликативные единицы - возможно, Num.Zero и Num.One - есть ли такая вещь для Num, другого класса, который включает в себя единицы или какой-либо другой способ, которым это сделанный?единицы для колец в haskell в Num или Rational
ответ
Если ваш экземпляр Num
является кольцом, один ожидает fromInteger
быть кольцевым гомоморфизмом и, таким образом, 0
и 1
будет просто работать. Это может не всегда выполняться. Num
Предшествующие классы, имеющие алгебраические законы, являются нормой. Кроме того, к сожалению, многие экземпляры Num
не являются кольцами (например, номерами с плавающей запятой).
Num
не совсем кольцевая структура, так как он также имеет «другие вещи», как abs
, а signum
(надеюсь) кольцо гомоморфизма fromInteger
. Я склонен думать, что это «вероятно, кольцо с каким-то другим».
Пример: кольцо Gaussian rationals
import Data.Ratio
import Data.Complex
type GaussianRational = Complex Rational
zero :: GaussianRational
zero = 0
one :: GaussianRational
one = 1
EDIT: Так как Z является начальным в кольце, идея использования fromInteger
таким образом, фактически делает много смысла.
Весь пакет 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
.
- 1. num + den-1/num наибольший коэффициент единицы
- 2. Как преобразовать num :: Rational в десятичное число?
- 3. Haskell. Функции в выражениях Num
- 4. Haskell Num Instance
- 5. Haskell: создание суперкласса Num
- 6. Класс Haskell Num не содержится в Ord?
- 7. Haskell: Почему (+), (-) часть Num typeclass?
- 8. Haskell: Реализация Num instaces для пользовательских newtypes
- 9. Haskell Instance of Num issue
- 10. Как определить тип, который представляет тип Единицы в Haskell?
- 11. Найти несколько колец в диаграмме
- 12. Как реализовать легенды для колец в d3plus
- 13. Объяснение чисел в Haskell
- 14. Haskell Почему «Num x» требует «Показать x»?
- 15. Простое объяснение колец в Riak?
- 16. Haskell Matrix, похоже, не вызывает Num instance
- 17. В JavaScript почему num == [num]?
- 18. Haskell - ghci - почему тип 1 - это Num?
- 19. Как изменить строку или int в Rational?
- 20. место случайных чисел для значений num num num array
- 21. Создание дополнительных привилегированных колец
- 22. Selenium или Rational Functional Tester
- 23. Нет экземпляра для (Num [t0]), возникающего из литерала '2' (Haskell)
- 24. Haskell Ошибка: Нет экземпляра для (Num [[a0]], вытекающее из использования `
- 25. Haskell Инстанции Num [Char] требуется для определения погрешности getPara
- 26. Haskell Нет экземпляра для (Num()), возникающего из литерала
- 27. Haskell: В чем разница между `Num [a] => a` и` Num a => [a] `
- 28. Regex newbie: Как выделить «num-num-num» в строке
- 29. Haskell ошибка Non типа переменного аргумент в ограничении: Num [с]
- 30. Что такое '(плавающий a, Num (a -> a))' в Haskell?
это хорошее предложение! - до тех пор, пока кто-то позаботится сделать fromInteger 0 вернуть ноль, а fromInteger 1 вернуть 1, он будет работать просто отлично! – simonize
@simonize Числовой литерал '1' уже' fromIntegral 1'. – AndrewC