This module defines the list of recognized modular features
of Haskell, most often (sloppily) referred to as extensions.

Closely mimicking the Language.Haskell.Extension module from
the Cabal library, this package also includes functionality for
computing languages as sets of features. Also, we make no
promise not to add extensions not yet recognized by Cabal.

Allow a specification attached to a
multi-parameter type class which indicates that some parameters
are entirely determined by others. The implementation will check
that this property holds for the declared instances, and will use
this property to reduce ambiguity in instance resolution.

Allow concrete XML syntax to be used in expressions and patterns,
as per the Haskell Server Pages extension language:
http://www.haskell.org/haskellwiki/HSP. The ideas behind it are
discussed in the paper "Haskell Server Pages through Dynamic Loading"
by Niklas Broberg, from Haskell Workshop '05.

Semantics of extensions applied to languages

Certain extensions imply other extensions, and this function
makes the implication explicit. This also handles deprecated
extensions, which imply their replacements.
The returned value is the transitive closure of implied
extensions.