Я просматривал контент по функциональному программированию и наткнулся на статью в Википедии о композиции функций. Я был удивлен, узнав, что в Ruby есть специальные операторы для композиции функций. Это рекомендуемый способ составления процессов/функций в Ruby 2.6.

f = proc{|x| x + 2}
g = proc{|x| x * 3}
(f << g).call(3) # -> 11; identical to f(g(3))
(f >> g).call(3) # -> 15; identical to g(f(3))

Я давно пользуюсь Ruby и по сей день время от времени сталкиваюсь с такими сюрпризами.