A hybrid between a pure functional language and an imperative language, i.e. a functional language that has some imperative features grafted on. The vast majority of so-called "functional languages" are actually quasi-functional, e.g. Scheme, SML, and Caml. This compromise is made because the purely functional approach is highly unsuited even for many simple programming tasks such as I/O, which is itself intrinsically tied to notions of state. Pure functional programming languages such as Haskell have constructs called monads that get around this limitation, allowing them to maintain referential transparency, that is generally broken by the availability of imperative features. Usually a term used only by pedants and purists of functional programming.