&gt; Lisp functions and macros OTOH must be variadic to enable the homoiconicity of the language.<p>That makes no sense at all.  Homoiconicty is a syntactic concept, variadicity is a semantic concept.  They have nothing to do with each other.<p>The feature that enables Haskell&#x27;s programming style is laziness, not currying.  Lisp can be trivially curried, but it cannot be trivially made lazy, so idioms like &quot;take 5 . filter p . drop 3&quot; -- i.e. (drop (filter p (take 5 arg)) 3) -- are much harder to compile efficiently.