What can we learn from how compilers are designed?
That's why I like Clojure's philosophy of a few data structures and many functions operating on them.Of course Alan Perlis wrote "It is better to have 100 functions operate on one data structure than 10 functions on 10 data structures."  in  1982.But pipelining outputs into inputs (you'll see it a lot in F# too) is just a simple, flexible concept.As Rich Hickey once said, "We're data processors".I think we somehow took a wrong path when OO got embraced as wholly as it did back in the 90s or so.