Arithmetic.Op: fasche Präzedenz für '^'-Operator
[ x1, x2 ] -> 2 ^ x1 + (2 * x2 + 1)
Gemäss Präzedenzregeln für Potenz und Summe würde ich erwarten, dass die obige Funktion äquivalent zu folgender Funktion ist:
[ x1, x2 ] -> (2 ^ x1) + (2 * x2 + 1)
Der Bewertung nach zu urteilen, wird aber ein Loop-Programm dann als richtig betrachtet, wenn es folgende Funktion berechnet (siehe Anhang):
[ x1, x2 ] -> 2 ^ (x1 + 2 * x2 + 1)
Quelltext: https://git.imn.htwk-leipzig.de/waldmann/autotool/-/blob/master/collection/src/Arithmetic/Op.hs#L116
Die Präzedenzen dort sehen etwas beliebig aus.
Am sichersten ist das Kopieren einer Vorlage, z.B. Haskell-Standard
https://www.haskell.org/onlinereport/haskell2010/haskellch9.html#x16-1710009
infixr 9 .
infixr 8 ^, ^^, ⋆⋆
infixl 7 ⋆, /, ‘quot‘, ‘rem‘, ‘div‘, ‘mod‘
infixl 6 +, -
-- The (:) operator is built-in syntax, and cannot legally be given
-- a fixity declaration; but its fixity is given by:
-- infixr 5 :
infix 4 ==, /=, <, <=, >=, >
infixr 3 &&
infixr 2 ||
infixl 1 >>, >>=
infixr 1 =<<
infixr 0 $, $!, ‘seq‘