@hackage base-compat0.8.2
A compatibility layer for base
Categories
License
MIT
Maintainer
Simon Hengel <sol@typeful.net>, João Cristóvão <jmacristovao@gmail.com>, Ryan Scott <ryan.gl.scott@gmail.com>
Links
Versions
Installation
Dependencies (2)
Dependents (219)
@hackage/rest-wai, @hackage/mockery, @hackage/Cabal, @hackage/monad-markov, @hackage/microformats2-parser, @hackage/criterion-measurement, Show all…
A compatibility layer for base

Scope
The scope of base-compat is to provide functions available in later versions
of base to a wider (older) range of compilers.
In addition, successful library proposals that have been accepted to be part of
upcoming versions of base are also included. This package is not intended to
replace base, but to complement it.
Note that base-compat does not add any orphan instances. There is a separate
package base-orphans for
that.
Basic usage
In your cabal file, you should have something like this:
build-depends: base >= 4.3
, base-compat >= 0.8.0
Then, lets say you want to use the isRight function introduced with
base-4.7.0.0. Replace:
import Data.Either
with
import Data.Either.Compat
Note (1): There is no need to import both unqualified. The .Compat modules
re-exports the original module.
Note (2): If a given module .Compat version is not defined, that either
means that:
- The module has not changed in recent base versions, thus no
.Compatis needed. - The module has changed, but the changes depend on newer versions of GHC, and thus are not portable.
- The module has changed, but those changes have not yet been merged in
base-compat: patches are welcomed!
Using Prelude.Compat
If you want to use Prelude.Compat (which provides all the
AMP/Traversable/Foldable changes from base-4.8.0.0), it's best to hide
Prelude, e.g.:
import Prelude ()
import Prelude.Compat
main :: IO ()
main = mapM_ print (Just 23)
Alternatively, you can use the NoImplicitPrelude language extension:
{-# LANGUAGE NoImplicitPrelude #-}
import Prelude.Compat
main :: IO ()
main = mapM_ print (Just 23)
Note that we use
mapM_ :: (Foldable t, Monad m) => (a -> m b) -> t a -> m ()
from Data.Foldable here, which is only exposed from Prelude since
base-4.8.0.0.
Using this approach allows you to write code that works seamlessly with all
versions of GHC that are supported by base-compat.
What is covered
So far the following is covered.
For compatibility with the latest released version of base
Prelude.Compatincorporates the AMP/Foldable/Traversable changes and exposes the same interface asPreludefrombase-4.8.0.0System.IO.Error.catchis not re-exported fromPrelude.Compatfor older versions ofbaseText.Read.Compat.readMaybeText.Read.Compat.readEitherData.Monoid.Compat.<>- Added
bitDefault,testBitDefault, andpopCountDefaulttoData.Bits.Compat - Added
toIntegralSizedtoData.Bits.Compat(if usingbase-4.7) - Added
boolfunction toData.Bool.Compat - Added
isLeftandisRighttoData.Either.Compat - Added
withMVarMaskedfunction toControl.Concurrent.MVar.Compat - Added
(<$!>)function toControl.Monad.Compat - Added
($>)andvoidfunctions toData.Functor.Compat (&)function toData.Function.Compat($>)andvoidfunctions toData.Functor.CompatdropWhileEnd,isSubsequenceOf,sortOn, andunconsfunctions toData.List.Compat- Correct versions of
nub,nubBy,union, andunionBytoData.List.Compat makeVersionfunction toData.Version.CompattraceId,traceShowId,traceM, andtraceShowMfunctions toDebug.Trace.CompatbyteSwap16,byteSwap32, andbyteSwap64toData.Word.CompatcallocandcallocBytesfunctions toForeign.Marshal.Alloc.CompatcallocArrayandcallocArray0functions toForeign.Marshal.Array.CompatfillBytestoForeign.Marshal.Utils.Compat- Added
Data.List.Compat.scanl' showFFloatAltandshowGFloatAlttoNumeric.CompatlookupEnv,setEnvandunsetEnvtoSystem.Environment.Compat
Supported versions of GHC/base
ghc-7.10.1/base-4.8.0.0ghc-7.8.4/base-4.7.0.2ghc-7.8.3/base-4.7.0.1ghc-7.8.2/base-4.7.0.0ghc-7.8.1/base-4.7.0.0ghc-7.6.3/base-4.6.0.1ghc-7.6.2/base-4.6.0.1ghc-7.6.1/base-4.6.0.0ghc-7.4.2/base-4.5.1.0ghc-7.4.1/base-4.5.0.0ghc-7.2.2/base-4.4.1.0ghc-7.2.1/base-4.4.0.0ghc-7.0.4/base-4.3.1.0ghc-7.0.3/base-4.3.1.0ghc-7.0.2/base-4.3.1.0ghc-7.0.1/base-4.3.0.0
Patches are welcome; add tests for new code!
Development
For Prelude.Compat there is an Prelude.index file that was generated from
the output of
ghc --show-iface Prelude.hi
To verify that Prelude.Compat matches the specification given in
Prelude.types run:
./check-Prelude.sh