The thing that&#x27;s really undesirable about the clojure code is an unfortunate consequence of dynamic typing.<p>Note that the bottom right corner of the expression problem matrix isn&#x27;t filled in. This means that newOp(newType) will fail <i>at run time</i> - you&#x27;ve simply replaced the difficult task of filling in the matrix with the easier task of partially filling it in and hoping for the best. Hope you&#x27;ve got a great test suite!<p>I must say that I strongly prefer the Haskell&#x2F;Scala&#x2F;etc approach where that missing square is an explicit compile time warning&#x2F;error.