Klasa Num z haskell pozwala na dość ogólne struktury algebraiczne i wygląda na to, że ma służyć do tworzenia pierścieni. Mówiąc o pierścieniu, wygodnie jest móc wyraźnie wymienić jego dodatkowe i multiplikatywne jednostki - być może Num.Zero i Num.One - czy istnieje coś takiego dla Num, innej klasy, która zawiera jednostki lub w inny sposób, że jest to Gotowe?jednostki dla pierścieni w haskell w Num lub Rational
Odpowiedz
Jeśli instancja Num
jest pierścień, oczekuje fromInteger
będzie homomorfizmem pierścienia, a zatem 0
i 1
będzie po prostu działać. To nie zawsze może się utrzymywać. Num
poprzedza typeclasses posiadające prawa algebraiczne być normą. Ponadto, niestety, wiele przypadków Num
nie jest dzwonków (takich jak liczby zmiennoprzecinkowe).
Num
nie jest to struktura pierścienia, ponieważ ma również „inne rzeczy” jak abs
, signum
a (mam nadzieję) homomorfizmem pierścienia fromInteger
. Mam tendencję do myślenia o tym jako "pewnie z pewnymi innymi rzeczami".
Przykład: pierścień Gaussian rationals
import Data.Ratio
import Data.Complex
type GaussianRational = Complex Rational
zero :: GaussianRational
zero = 0
one :: GaussianRational
one = 1
EDIT: Ponieważ Z jest w początkowej Pierścienia, pomysł wykorzystania fromInteger
ten sposób rzeczywiście sprawia, że wiele sensu.
Cały pakiet algebra
jest poświęcony tego rodzaju celom. Na przykład, mamy
class (Rig r, Rng r) => Ring r
oraz towarzyszącą mu rzucić
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
który jest co najmniej jeden sposób, aby zbudować pierścień. Jeśli robisz wysoce ogólną algebrę, to może być warta algebra
, ale większość bibliotek oczekuje po prostu Num
.
- 1. Haskell: making nadklasą Num
- 2. Jak przeanalizować ułamek dziesiętny w produkcie Rational w języku Haskell?
- 3. Objaśnienie liczb w Haskell
- 4. Proste wyjaśnienie Pierścieni w Riaku?
- 5. W Haskell, czy istnieje dobry sposób, aby napisać funkcję konwersji num na num `toNum :: (Num a, Num b) => a -> b`?
- 6. Visual Studio 8, PVCS lub Rational ClearCase
- 7. Dlaczego powrócić const Rational zamiast Rational
- 8. Najmniejszy zestaw najmniejszych pierścieni
- 9. Wartość domyślna dla Rational Number struct
- 10. No toFloat w Haskell
- 11. Przesłaniam fromInteger w Haskell
- 12. Serializacja funkcji w Haskell
- 13. Klasa Haskella Num nie zawarta w Ord?
- 14. Klasa "Zippable" dla haskell?
- 15. Cubesumming w Haskell
- 16. Czy istnieje domyślny typ polimorficzny jednostki haskell
- 17. Haskell: zrozumienie "No instancji dla" komunikatów o błędach w ghci
- 18. Jak rozumieć "(Num b) => długość :: [a] -> b" w Haskell?
- 19. Num vs Integral
- 20. Definicja funkcji w Haskell
- 21. Korzystanie z Data.Heap w Haskell, lub czytanie dokumentacji Haskell dla początkujących
- 22. Rational Application Developer vs Eclipse
- 23. org.hibernate.MappingException: Powtarzana kolumna w odwzorowaniu dla jednostki
- 24. Identyfikacja bieżącego HEC dla funkcji w Haskell
- 25. Tworzenie macierzy rosnących koncentrycznych pierścieni liczb w R
- 26. Funkcja parsowania w haskell
- 27. Bity nie pochodzi od Num?
- 28. Jednostki dla okresu przejściowego CSS
- 29. Haskell wyrzuca błąd składniowy w obcym miejscu
- 30. Testowanie jednostki w wersji flex
To dobra sugestia! - tak długo, jak długo dba się o to, aby zlineut 0 powrócił zero, a od Integer 1 zwraca 1, to będzie działało dobrze! – simonize
@simonize Literał numeryczny '1' jest już' fromIntegral 1'. – AndrewC