Here's another whacky idea: how about adding a so-called FuncSeq to the collections library for composing functions?

Since FuncSeq is (obviously) a sequence, that might help with the intuition of the function application order. The idea is the function application order is the same as the iteration order of the sequence:

from collections import FuncSeq

fun_seq = FuncSeq([str, len])
fun_seq(789)  # 3
fun_seq[::-1]("789")  # '3'

---
Ricky.

"I've never met a Kentucky man who wasn't either thinking about going home or actually going home." - Happy Chandler