haskell operators dollar-sign

¿Hay un inverso del operador Haskell $?



operators dollar-sign (6)

A partir de GHC 7.10 ( base 4.8.0.0), & está en Data.Function : https://hackage.haskell.org/package/base-4.8.0.0/docs/Data-Function.html

Una pregunta rápida, ¿hay un operador en Haskell que funcione como el signo de dólar pero que dé prioridad al lado izquierdo? IE en lugar de

f (x 1)

siendo escrito como

f $ x 1

Me gustaría escribirlo como

x 1 $ f

Esto es puramente una cosa estilística. Estoy ejecutando una secuencia de funciones en orden y sería bueno si pudiera escribirlas a la izquierda para escribir para que coincidan con las que leí a la izquierda para escribir. Si hay un operador para esto?

[actualización] Un par de personas me han preguntado si no puedo definir el mío. En respuesta, quería comprobar que no había un operador existente antes de reinventar la rueda.


En Haskell puedes usar flip para cambiar el orden de los argumentos de cualquier función binaria u operador:

ghci> let (|>) = flip ($) ghci> 3 |> (+4) |> (*6) 42


Este combinador se define (con la lengua en la mejilla) en el paquete de data-aviary :

Prelude Data.Aviary.BirdsInter> 1 `thrush` (+2) Loading package data-aviary-0.2.3 ... linking ... done. 3

Aunque en realidad usar ese paquete es algo bastante tonto, leer la fuente es divertido y revela que este combinador se forma a través del conjuro mágico de flip id (o, en lenguaje ornitológico, cardinal idiot ).


No conozco ninguna versión estándar, pero he visto (#) usado para ese propósito en un par de lugares. El que en particular viene a la mente es HOC, que lo usa en un idioma como:

someObject # someMessage param1 param2

Me parece recordar ver otras bibliotecas "orientadas a objetos" usando el operador # de la misma manera, pero no puedo recordar cuántas o cuáles.


No puedes simplemente redefinir $ .

let ($) x f = f x

O simplemente elija un operador diferente, como $$


No sé si hay un operador estándar, pero ¿qué le impide escribir el suyo? Esto funciona en ghci:

Prelude> let a $> b = b a Prelude> 1 $> (+2) 3 Prelude> sum [1, 2] $> (+2) 5 Prelude> map (+2) [1, 2] $> map (+3) [6,7]

ACTUALIZACIÓN : buscar en hoogle por a -> (a -> b) -> b (es el tipo de este operador) no encontró nada útil.