Haskell-Datentyp Aliasnamen

8

Ich habe ein mathematisches Vector Modul in Haskell geschrieben.

Also begann ich mit:

%Vor%

Fein - damit kann ich jeden beliebigen numerischen Datentyp verwenden. Das Problem ist, dass ich nicht überall Double und Vector Double schreiben will, aus dem einfachen Grund, dass ich nicht müsste. Also füge ich hinzu:

%Vor%

Aber natürlich ist diese zweite Zeile falsch, da es jetzt zwei Deklarationen von Vector gibt. Also, was soll ich ändern? Ich denke mir, nein, ich werde das alles über meinen Code schreiben, deshalb möchte ich den Typalias einfach als Vector belassen. Was bedeutet, dass ich den Datentyp ändern muss. Aber wenn ich das ändere, dann habe ich das Gefühl, ich sollte auch den Konstruktor ändern, was alles noch verwirrender macht. Aber wenn es sich unangenehm anfühlt, dass der Konstruktor auf diese Weise den gleichen Namen wie der Typalias hat.

Im Moment habe ich das:

%Vor%

Ich habe T willkürlich ausgewählt (ich denke, es steht für "type"), aber ich bin mir da nicht so sicher. Normalerweise, wenn ich Funktionen dokumentiere, würde ich -- Calculate the magnitude of a Vector sagen, aber mit VectorT habe ich das Gefühl, ich sollte wirklich diesen Namen verwenden. Also nehme ich Bezug auf sie als vectors (nicht groß geschrieben) - nur dann habe ich das Gefühl, dass ich diese Konvention auf jeden Kommentar für jeden Datentyp anwenden muss.

Hat sich jemand in einer ähnlichen Situation befunden? Kann jemand in diesem Fall an eine elegantere Lösung denken?

    
mk12 08.07.2012, 05:00
quelle

2 Antworten

8

Eine Lösung für Ihr spezielles Problem wäre, den Datentyp in einem anderen Modul als dem Typ-Synonym zu haben. Das heißt, haben Sie ein Math.Vector -Modul, das die Datendeklaration und einige generische Funktionen enthält (dh Funktionen, die für alle numerischen Typen arbeiten). Wenn Sie in Ihrem Code tatsächlich Vector Double verwenden, erstellen Sie einfach den Typ synonym mit einem qualifizierten Import:

%Vor%

Ich denke, das macht aus Sicht der Code-Organisation Sinn. Insbesondere, wenn Sie den Typ Vector für alle numerischen Typen definiert haben, erwarte ich, dass die Funktionen in diesem Modul auch für alle numerischen Typen geeignet sind. Die Tatsache, dass Sie Vector Double viel in einem anderen Teil des Codes verwenden, sollte das Modul nicht beeinflussen, in dem Vector tatsächlich definiert ist. Schließlich ist es völlig in Ordnung, sich Vector Int in einem anderen Teil Ihres Programms zu überlegen.

Abgesehen davon bin ich mir nicht sicher, ob es Vector genannt wird, ist die beste Idee. Ein Vektor muss nicht unbedingt drei Dimensionen haben, daher würde ich Ihren Datentyp so etwas wie Vector3D nennen. Dies ist eigentlich der Name, der in einigen anderen APIs (wie der Java 3D API) verwendet wird, daher ist es wahrscheinlich eine gute Wahl.

    
Tikhon Jelvis 08.07.2012, 09:56
quelle
2

Gibt es einen bestimmten Grund, nicht nur

zu tun? %Vor%

Das scheint mir die einfachste Idee zu sein ...

    
MathematicalOrchid 09.07.2012 09:09
quelle