Ich möchte einen Typ von "Ideal" definieren, der eine Liste mit einer gewissen Struktur ist. Numeric Prelude definiert bereits Instanzen von Ring
für Listen, aber sie verwenden nicht die Definitionen von Addition und Multiplikation, die ich möchte. Also ich denke in diesem Fall sollte ich sagen
Das funktioniert gut, aber jetzt gibt es einen Fehler, wenn ich es versuche, sagen wir take 5 $ Ideal [0..]
.
Gibt es eine Möglichkeit, die gewünschten Funktionen beizubehalten und nur die Definitionen außer Kraft zu setzen, die ich explizit überschreibe?
Wenn Sie nicht automatisch so eingestellt werden, dass vollständig automatisch verwendet wird, können Sie die Dienstprogrammfunktionen in verwenden das Paket newtype
, z etwas wie over Ideal $ take 5
.
Bearbeiten: Außerdem ist es nicht schwer, die Funktionen aus dem Paket newtype
auf andere Fälle auszuweiten. Zum Beispiel hatte ich diese Definitionen herumliegen:
Nicht wirklich das beste Design für solche Kombinatoren, vermute ich, aber Sie bekommen die Idee.
Für einfache Funktionen, nein. Sie müssen Ihre eigenen Definitionen bereitstellen.
Jedoch können Sie für Funktionen, die zu einer Typklasse gehören, die Erweiterung GeneralizedNewtypeDeriving
verwenden, um die gewünschten Typklassen aus dem zugrunde liegenden Typ von newtype
zu erstellen.
Tags und Links haskell