Ich mache einige grundlegende Module über 2D-Geometrie und ich habe beschlossen, Koordinaten in newtypes zu wickeln. Dies ist so, dass ich leicht kartesische Koordinaten (newtype Xy = Xy(Float,Float)
) von Polarkoordinaten unterscheiden kann (newtype Ra=Ra(Float,Float)
), vielleicht auch komplexe Zahlen; auch um sie Instanzen von Num
und Fractional
zu machen, damit ich Betreiber überlasten kann.Fractional Koordinaten newtype
Aber müssen sie entweder als ein Paar Float
s oder als Paar Double
s definiert werden? In einigen trigonometrischen Funktionen könnte Double
s merklich besser in Bezug auf Präzision arbeiten; viele der Funktionen, die ich für den Xy
newtype schreibe Ich möchte, dass sie so allgemein wie möglich sind. Also gibt es eine Möglichkeit, einen neuen Typ mit einem Paar Nummern der Fractional
Klasse zu machen?
Auch, weil ich es ein wenig umständlich zu finden, zu schreiben Xy (0,0)
anstatt einfach (0,0)
, ich machte die ·
Betreiber:
(·) a b = Xy (a,b)
Aber es scheint, Vorrang vor dem Rest zu haben, so 3+4·2+1
als 3+(Xy (4,2))+1
bewertet . Und es hilft auch nicht mit Funktionsdeklarationen, Lambda-Ausdrücke, etc ... Ich muss immer noch \Xy (a,b)->
schreiben.
Danke.
Wie für die '·' Operator (die wirklich in einer separaten Frage gehört) - Sie benötigen eine _Fixement-Deklaration_, z. 'infixl 7 ·' (das ist der äquivalente '^ &' Operator in [der 'diagrams' Bibliothek] (http://hackage.haskell.org/package/diagrams-lib-1.3.1.3/docs/Diagrams-Coordinates. html # v: -94-38-) verwendet). – leftaroundabout