Die Num-Klasse von Haskell ermöglicht ganz allgemeine algebraische Strukturen und sieht aus wie es für die Herstellung von Ringen verwendet werden soll. Wenn man jedoch von einem Ring spricht, ist es bequem, seine zusätzlichen und multiplikativen Einheiten explizit nennen zu können - vielleicht Num.Zero und Num.One - gibt es so etwas für Num, eine andere Klasse, die Einheiten oder eine andere Weise enthält erledigt?Einheiten für Ringe in Haskell in Num oder Rational
Antwort
Wenn Ihre Instanz von Num
ein Ring ist, erwartet man fromInteger
ein Ringhomomorphismus zu sein und somit 0
und 1
wird funktionieren. Dies kann nicht immer halten. Num
predates typeclasses mit algebraischen Gesetzen die Norm sein. Unglücklicherweise sind viele Instanzen von Num
keine Ringe (wie Gleitkommazahlen).
Num
ist nicht wirklich eine Ringstruktur, da es auch „andere Sachen“ wie abs
, signum
und der (hoffentlich) Ringhomomorphismus fromInteger
. Ich neige dazu, es als "wahrscheinlich mit anderen Sachen ringend" zu denken.
Beispiel: der Ring von Gaussian rationals
import Data.Ratio
import Data.Complex
type GaussianRational = Complex Rational
zero :: GaussianRational
zero = 0
one :: GaussianRational
one = 1
EDIT: Da Z Anfangs in Ring ist, die Idee fromInteger
auf diese Weise tatsächlich macht sehr viel Sinn zu verwenden.
Das gesamte Paket ist diesen Zwecken gewidmet. Zum Beispiel haben wir
class (Rig r, Rng r) => Ring r
und Unterstützung der
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
gegossen, die zumindest eine Art und Weise ist ein Ring aufzubauen. Wenn Sie sehr allgemeine Algebra tun, dann algebra
könnte es wert sein, aber die meisten Bibliotheken erwarten nur Num
.
- 1. In Bezug auf Haskell Typklassen (Num vs Read)
- 2. Haskell warum benötigt "Num x" "Show x"?
- 3. Gibt es in Haskell Unendlichkeit :: Num a => a?
- 4. Erläuterung der Zahlen in Haskell
- 5. Wie konvertiert man (Num a) => a in Haskell?
- 6. nicht Kiste für `num`
- 7. Array oder Liste für RL in Haskell
- 8. Gibt es ein COM oder .Net SDK für Rational Rose?
- 9. Referenz Transparenz mit Polymorphismus in Haskell
- 10. Visual Studio 8, PVCS oder Rational ClearCase
- 11. So implementieren Sie Legenden für Ringe in d3plus
- 12. Wie kann ich den Tooltip in d3plus.full.js für Ringe anpassen?
- 13. Konservierende Einheiten für Berechnungen in der Programmierung
- 14. Umwandlung Einheiten in Python
- 15. (Num a) vs Integer Typinferenz
- 16. Wie kann ich Einheiten in menschlicher Sprache als Postfixes in Haskell schreiben, wie `3 Sekunden`?
- 17. Funktion currying in Haskell
- 18. Millimeter in boost :: Einheiten
- 19. Rational-Anwendungsentwickler vs Eclipse
- 20. Rational hinter Python ist für Syntax bevorzugt
- 21. Ein modaler Rahmen in IBM Rational Rhapsody
- 22. Elixier, num = [9], num wird '\ t' zugewiesen
- 23. "Zippable" -Klasse für Haskell?
- 24. Regressionstest mit Rational Robot
- 25. newtype Verhalten in Haskell
- 26. Wie UML2Tools in Rational Business Developer installieren
- 27. Java-Konvertierungsbibliothek für metrische Einheiten?
- 28. Anhebung der Klasseninstanz in Haskell
- 29. Rational Anzahl Rechner
- 30. Videos oder Tutorials für vim Haskell-Modus
das ist ein guter Vorschlag! - Solange man darauf achtet, dass fromInteger 0 die Null zurückgibt und fromInteger 1 eine 1 zurückgibt, wird es gut funktionieren! – simonize
@simonize Das numerische Literal '1' ist bereits' fromIntegral1'. – AndrewC