tipos sufijo palabras morfemas los lexemas las interfijos interfijo infijo identificar explicacion estructura entre diferencia derivativos como haskell

haskell - sufijo - palabras morfemas



¿Cuál es la prioridad de infijo de la anotación de tipo(::) (1)

La parte :: se llama una anotación de tipo.

Un mensaje en la lista de correo apunta exactamente a la misma conclusión, apoyada por la gramática:

https://mail.haskell.org/pipermail/beginners/2012-December/011017.html

No es realmente un operador binario.

Es parte de la sintaxis, por lo que no tiene una prioridad exacta, pero como lo pregunta, supongo que no está interesado en las declaraciones de tipo

foo :: Int -> Double foo = sin . fromIntegral

sino más bien en expresiones de tipo firma. La producción en la sintaxis libre de contexto es

exp → infixexp :: [context =>] type

por lo que la firma es para toda la expresión de infijo:

Prelude> toEnum . floor $ 12.7 + toEnum 73 :: Char ''U''

por lo tanto, si tuviera una precedencia, estaría por debajo de 0 (la precedencia de ($)).

Pero ten en cuenta que

"La gramática es ambigua con respecto a la extensión de las abstracciones lambda, las expresiones y los condicionales. La ambigüedad se resuelve con la meta-regla de que cada una de estas construcciones se extiende lo más a la derecha posible".

así

Prelude> (/x -> x + x :: Int -> Int) 2 <interactive>:16:10: No instance for (Num (Int -> Int)) arising from a use of `+'' Possible fix: add an instance declaration for (Num (Int -> Int)) In the expression: x + x :: Int -> Int In the expression: / x -> x + x :: Int -> Int In the expression: (/ x -> x + x :: Int -> Int) 2

La firma de tipo aquí se extiende solo sobre x + x , ya que se analiza como parte de la abstracción lambda

[ /x -> (x + x :: Int -> Int) extiende más hacia la derecha que solo /x -> x + x ]

Entonces, si desea dar una firma de tipo a una abstracción lambda, necesita paréntesis explícitos:

Prelude> ((/x -> x + x) :: Int -> Int) 2 4

¿Cuál es la prioridad de :: , hay algún operador que tenga incluso una prioridad más baja?

Parece que la prioridad de :: es menor que $ , porque las dos expresiones a continuación devuelven "ab"

map head $ ["alice", "bob"] :: String map head ["alice", "bob"] :: String