function - Función de infijo Haskell precedencia de la aplicación
operators precedence (2)
Sea fxy = x * y
. Podemos aplicar esta función de dos maneras: f 5 6
, o, usando la notación infijo, 5 `f` 6
. ¿Se aplican las reglas del operador a esta última expresión? ¿Qué precedencia tendrá esta aplicación? ¿Es solo otra forma de aplicación de función, y también tendrá la mayor prioridad?
Supongo que el compilador ve esta forma especial (debido a ``
y / o el nombre que comienza con una letra (?)), Y en realidad lo trata como una aplicación de función ordinaria, en lugar de considerarlo un operador.
El informe Haskell 98 tiene una sección sobre aplicaciones de operador que lo aclara:
Un operador es un símbolo de operador, como + o $$, o es un identificador ordinario encerrado en acentos graves (backquotes), como `op`. Por ejemplo, en lugar de escribir la aplicación de prefijo op xy, se puede escribir la aplicación de infijo x `op` y. Si no se da una declaración de corrección para `op`, entonces el valor predeterminado es la prioridad más alta y la asociatividad a la izquierda (ver Sección 4.4.2).
Como lo indican las otras respuestas, el Informe también tiene una sección sobre haskell.org/onlinereport/decls.html#fixity que le permite definir su propia fixity, por ejemplo:
infixl 7 `op`
Si no se da una declaración de fijación explícita, como por ejemplo
infixl 7 `quot`
una función de infijo con infixl 9
tiene la fijación predeterminada de infixl 9
, por lo que se tratará como cualquier otro operador de infijo con la misma fijación.