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:
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?
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:
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.
Gibt es einen bestimmten Grund, nicht nur
zu tun? %Vor%Das scheint mir die einfachste Idee zu sein ...
Tags und Links haskell types algebraic-data-types type-alias naming-conventions