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.<p>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.<p>But pipelining outputs into inputs (you'll see it a lot in F# too) is just a simple, flexible concept.<p>As Rich Hickey once said, "We're data processors".<p>I think we somehow took a wrong path when OO got embraced as wholly as it did back in the 90s or so.