A difference between Haskell and Common Lisp
Haskell has strong typing and lazy evaluation, which makes it easy for functions to <i>take only one argument</i> at a time. Although a function could take a tuple parameter, it&#x27;s usually rewritten to take each component of the tuple as a separate parameter, which makes the strong typing and built-in currying simple, higher structures like monads possible, and a syntax to suit this style. Lisp functions and macros OTOH <i>must be variadic</i> to enable the homoiconicity of the language. It&#x27;s therefore much more difficult for parameters to be typed, or to curry them.<p>These two styles make Haskell and Lisp mutually incompatible, unless they use clunky addons like Template Haskell macros or Typed Clojure annotations. The pure form of each language, however, is based on two mutually exclusive foundations, i.e. strongly typed auto-curried parameters vs variadic untyped macro parameters. The poster child of each language, i.e. monads and macros, thus also don&#x27;t mix well with each other.