Watching Hickey's talk, many of the complaints seemed to be valuable, <i>but they didnt seem to be about static types</i>. Rather, it was about some problems with existing data types locking one into a rigid data model when the domain is constantly expanding.<p>This post by DeGoes makes the same point. <a href="http://degoes.net/articles/kill-data" rel="nofollow">http://degoes.net/articles/kill-data</a><p>The default model of algebraic data types is too inflexible.<p>There are different extensions which work with this issue. Good record system, Extensible cases, using free monads etc. We can have concise syntax for automatically declaring an interface for a algebraic data type based on some field values (ie, customizable deriving statements). Namespace qualified keywords, so we have rdf like attribute based semantics.<p>The post doesnt respond to the issue but suggests that if you want to do the same thing in clojure with error handling etc, you will need to think about this stuff.<p>Also, Hickey's mention of Monads was again not about static types. Monad laws are not typechecked. Their motivation is purity. The only slight inconvenience in a dynamic context is that you dont have return type polymorphism, so you have to type IOreturn instead of return.