Haskell newtype, aber alte Funktionen behalten

8

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

%Vor%

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?

    
Xodarap 25.08.2011, 02:16
quelle

2 Antworten

11

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:

%Vor%

Nicht wirklich das beste Design für solche Kombinatoren, vermute ich, aber Sie bekommen die Idee.

    
C. A. McCann 25.08.2011 02:26
quelle
6

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.

%Vor%     
hammar 25.08.2011 02:23
quelle

Tags und Links