Unification is used during type inference, for instance in the functional programming language Haskell. On one hand, the programmer does not need to provide type information for every function, on the other hand it is used to detect typing errors. The Haskell expression codice_7 is not correctly typed. The list construction function codice_8 is of type codice_9, and for the first argument codice_10 the polymorphic type variable codice_11 has to be unified with codice_10's type, codice_13. The second argument, codice_14, is of type codice_15, but codice_11 cannot be both codice_13 and codice_18 at the same time.