These extensions are not really extensions, but instead control which Haskell standard GHC attempts to be faithful to.
Conceptually, GHC starts with a kind of “null language,” in which no extensions are enabled, and then enables a select number of extensions “by default.” Which extensions count as “default extensions” in this sense is controlled by which of the following flags, if either, is present (if they are both present, the last one “wins”).
Haskell98
Available in: All recent GHC versions
The Haskell98 “language” attempts to follow the Haskell 98 Revised Report as closely as it can; the extensions it enables are currently:
DatatypeContextsImplicitPreludeMonomorphismRestrictionNondecreasingIndentationNPlusKPatternsTraditionalRecordSyntax
Haskell2010
Available in: All recent GHC versions
The Haskell2010 “language” attempts to follow the Haskell 2010 Report as closely as it can; the extensions it enables are currently:
DatatypeContextsDoAndIfThenElseEmptyDataDeclsForeignFunctionInterfaceImplicitPreludeMonomorphismRestrictionPatternGuardsRelaxedPolyRecTraditionalRecordSyntax
The Default Language
If neither of the above two “languages” are used, then GHC enables a short list of extensions as a “default language;” these extensions are currently:
DoAndIfThenElseEmptyDataDeclsForeignFunctionInterfaceImplicitPreludeMonomorphismRestrictionNondecreasingIndentationPatternGuardsRelaxedPolyRecTraditionalRecordSyntax