{-| Import this module in your code to access the entire library's
    functionality:

> import Control.Error

    This module exports the entire library as well as useful exports from other
    standard error-handling libraries:

    * "Control.Error.Safe": Generalizes the @safe@ library, including 'Either',
      'EitherT', and 'MonadPlus' variations on total functions

    * "Control.Error.Script": Support for simple scripts that catch all errors
      and transform them to 'String's

    * "Control.Error.Util": Utility functions and conversions between common
      error-handling types

    * @Control.Monad.Trans.Either@: The 'EitherT' monad transformer

    * @Control.Monad.Trans.Maybe@: The 'MaybeT' monad transformer

    * @Data.Either@: 'Either' utility functions

    * "Data.EitherR": throw and catch functions, and their corresponding
      \"success\" monads

    * @Data.Maybe@: 'Maybe' utility functions

    * @Safe@: Total versions of partial Prelude functions

    This module does not re-export partial functions from other libraries.
-}

module Control.Error (
    -- * Re-exports
    module Control.Error.Safe,
    module Control.Error.Script,
    module Control.Error.Util,
    module Control.Monad.Trans.Either,
    module Control.Monad.Trans.Maybe,
    module Data.Either,
    module Data.EitherR,
    module Data.Maybe,
    module Safe
    ) where

import Control.Error.Safe
import Control.Error.Script
import Control.Error.Util
import Control.Monad.Trans.Either (
    EitherT(EitherT),
    runEitherT,
    eitherT,
    bimapEitherT,
    mapEitherT,
    hoistEither,
    left,
    right )
import Control.Monad.Trans.Maybe (
    MaybeT(MaybeT),
    runMaybeT,
    mapMaybeT,
    liftCallCC,
    liftCatch,
    liftListen,
    liftPass )
import Data.Either (either, lefts, rights, partitionEithers)
import Data.EitherR
import Data.Maybe (
    maybe,
    isJust,
    isNothing,
    fromMaybe,
    listToMaybe,
    maybeToList,
    catMaybes,
    mapMaybe )
import Safe (
    tailDef,
    tailMay,
    tailSafe,
    initDef,
    initMay,
    initSafe,
    headDef,
    headMay,
    lastDef,
    lastMay,
    minimumDef,
    minimumMay,
    maximumDef,
    maximumMay,
    foldr1Def,
    foldr1May,
    foldl1Def',
    foldl1May',
    fromJustDef,
    atDef,
    atMay,
    readDef,
    readMay,
    lookupJustDef,
    findJustDef )
