/ / Überlastungswinkel in Haskell als innerer Produktbetreiber - Haskell

Überlastwinkel in Haskell als innerer Produktbetreiber - Haskell

Ich frage mich, ob ich spitze Klammern "<" und ">" etwas überladen kann:

data Vec a = Vec [Integer] deriving Show
let u = Vec [1, 2, 3]
let v = Vec [2, 4, 5]

<u, v> = inner product of u and v

Ich weiß, dass ich "<&>" als Operator überladen kann:

Vec u <&> Vec v = Vec $ zipWith(x y -> x*y) u v

Antworten:

8 für die Antwort № 1

Nein, das kannst du wirklich nicht tun. Haskell ist nicht Agda. Haskell erkennt es (), [], und {} nur Klammern. () werden nur für Tupeltypen und Gruppierungen verwendet. {} werden für verschiedene syntaktische Zwecke verwendet, von denen Sie keine Kontrolle haben. [] werden normalerweise für Listen verwendet. Sie können verwenden OverloadedLists und / oder MonadComprehensions Die Art und Weise zu beeinflussen, wie die Syntax der Liste interpretiert wird, aber nur in begrenztem Umfang, die sich nicht auf das beziehen, was Sie verlangen. Es gibt keine Möglichkeit, Haskell davon zu überzeugen < oder > sind Klammern. Das einzige, was Sie wahrscheinlich tun könnten, wäre, Ihre eigene Syntax mit Template Haskell zu verarbeiten, aber das wird zusätzlichen zusätzlichen syntaktischen Overhead hinzufügen.