Language Extensions Overview
GHC extensions are enabled per file with {-# LANGUAGE ExtensionName #-} or project-wide in the .cabal file (default-extensions). The GHC2021 edition enables ~46 widely used extensions by default (e.g., BangPatterns, ScopedTypeVariables, TypeApplications, DeriveFunctor, GeneralizedNewtypeDeriving, FlexibleContexts, FlexibleInstances, MultiParamTypeClasses, RankNTypes, StandaloneDeriving, TupleSections, NamedFieldPuns, KindSignatures, ExistentialQuantification). GHC2024 (GHC 9.10+) adds more (e.g., LambdaCase, DataKinds, GADTs, DerivingStrategies, RoleAnnotations).
String literals as Text/ByteString/any IsString record.field syntax LambdaCase, MultiWayIf RecordWildCards, NamedFieldPuns Record pattern conveniences
Type variables scoped over function bodies (with forall) @Type arguments Generalized algebraic data types Type-level functions, associated types
DataKinds, PolyKinds, KindSignatures Promote data to the type level
MultiParamTypeClasses, FunctionalDependencies FlexibleInstances, FlexibleContexts Relaxed instance/context rules
DerivingStrategies, DerivingVia, DeriveAnyClass, GeneralizedNewtypeDeriving TemplateHaskell, QuasiQuotes StrictData, Strict Linear arrows a %1 -> b import Data.Map qualified as M forM_ xs \x ->... without $