Custom infix operators can be emulated in Python using prettify-symbols-mode.
<img src="/img/python-infix.png" width=700px>
In your emacs config include:
(global-prettify-symbols-mode 1) (add-hook 'python-mode-hook (lambda () (mapc (lambda (pair) (push pair prettify-symbols-alist)) '(("@compose@" . #X2218) ("@pipe@" . #Xe135)))))
pip install infix.
pip install toolz, a functional programming library, otherwise you
can define the infix operations yourself.
import toolz.curried as tz from infix import custom_infix as infix @infix('__rmatmul__', '__matmul__') def compose(a, b): return tz.compose(a, b) @infix('__rmatmul__', '__matmul__') def pipe(a, b): return tz.pipe(a, b) [1, 2, 3] @pipe@ (tuple @compose@ tz.map(lambda x: x+1))
Other interesting functions - cons as ':' and concatv/itertools.chain as '++'.
I do not recommend using this trick in production but it is certainly cool to see emacs enabling these shenanigans.