It is possible to use implicits to achieve a similar effect. For example:
(untested, but should be something like this)
object Operator {
class WithOperator[T](that: T) {
def &:[U](f: T => U) = f(that)
}
implicit def withOperator[T](that: T) = new WithOperator(that)
}
Using this system, you can't use the name $, because the name needs to end with a : (to fix the associativity) and the dollar is a normal identifier (not operator identifier), so you can't have it in the same name as a :, unless you separate them with underscores.
So, how do you use them? Like this:
val plusOne = (x: Int) => {x + 1}
plusOne &: plusOne &: plusOne &: 1