Provide Prelude and Data.List with fixed content across GHC versions

LTS Haskell 22.29:
Stackage Nightly 2024-07-13:
Latest on Hackage:

See all snapshots prelude-compat appears in

BSD-3-Clause licensed by Henning Thielemann
Maintained by [email protected]
This version can be pinned in stack with:prelude-compat-,3366

Module documentation for

Depends on 1 package(full list with versions):
Used by 2 packages in lts-14.27(full list with versions):

This package allows you to write warning-free code that compiles with versions of base before and after AMP and FTP, that is, base before and beginning with 4.8, respectively, and GHC before and beginning with 7.10, respectively. It serves three purposes:

  • Prevent you from name clashes of FTP-Prelude with locally defined functions having names like <*>, join, foldMap.

  • Prevent you from redundant import warnings if you manually import Data.Monoid or Control.Applicative.

  • Fix list functions to the list type, contrarily to the aim of the FTP. This way you are saved from length (2,1) == 1 and maximum (2,1) == 1, until you import Data.Foldable.

You should add

import Prelude2010
import Prelude ()

to your modules. This way, you must change all affected modules. If you want to avoid this you may try the prelude2010 package or if you already import Prelude explicitly, you may try to add

Default-Extensions: CPP, NoImplicitPrelude
CPP-Options: -DPrelude=Prelude2010

to your Cabal file.

In my opinion, this is the wrong way round. The presented Prelude2010 module should have been the one for GHC-7.10 and the Prelude with added and generalized list functions should have been an additional PreludeFTP, preferably exported by a separate package like all other alternate Prelude projects. But the purpose of the FTP was to save some import statements at the expense of blowing up the Foldable class and prevent simple ways to write code that works with GHC version before and starting with GHC-7.10 and that does not provoke warnings.

Related packages:

  • 'base-compat': The opposite approach - Make future function definitions available in older GHC versions.

  • haskell2010: Defines the Prelude for Haskell 2010. Unfortunately, haskell2010 is not available anymore since GHC-7.10, because of the AMP.

  • 'numeric-prelude': It is intended to provide a refined numeric class hierarchy but it also provides a non-numeric subset of the Prelude that is more stable than the one of base.