A quick question, is there an operator in Haskell that works like the dollar sign but gives precedence to the left hand side. I.E. instead of
f (x 1)
This combinator is defined (tongue in cheek) in the data-aviary package:
Prelude Data.Aviary.BirdsInter> 1 `thrush` (+2)
Loading package data-aviary-0.2.3 ... linking ... done.
3
Although actually using that package is a rather silly thing to do, reading the source is fun, and reveals that this combinator is formed via the magic incantation of flip id
(or, in ornithological parlance, cardinal idiot
).
I am not aware of any standard version, but I've seen (#) used for that purpose in a couple places. The one in particular that comes to mind is HOC, which uses it in an idiom like:
someObject # someMessage param1 param2
I seem to recall seeing other "object-oriented" libraries using the # operator in the same way, but cannot remember how many or which ones.
I do not know, whether there is an standart operator, but what prevents you from writing your own? This works in 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]
UPDATE: searching on hoogle for a -> (a -> b) -> b
(it is the type of this operator) found nothing useful.
As of GHC 7.10 (base
4.8.0.0), &
is in Data.Function
: https://hackage.haskell.org/package/base-4.8.0.0/docs/Data-Function.html
Can't you just redefine $
.
let ($) x f = f x
Or just choose a different operator, like $$
In Haskell you can use flip
to change arguments' order of any binary function or operator:
ghci> let (|>) = flip ($)
ghci> 3 |> (+4) |> (*6)
42