You can define a method "=>" in Object as: => aBlock ^ aBlock value: self
That would allow you to write expressions like this: 7 => [ :x | x+3 ] => [ :x| x*3 ], if you further define "=>" in Array as: => aBlock ^ aBlock valueWithArguments: self you are able to write your example: (([ :f :g | [ :x | f (g x) ] ]) [:x | x + 1] [:x | x - 1]) 5 as: 5 => ({ [:x | x + 1]. [:x | x - 1]} => [ :f :g | [ :x | x => g =>f ] ]). It reads from left to right where yours is the usual Arabic (right to left) favoured in functional style.