-- | This module provides three different datatypes: 'AEither' is the
-- applicative version of Either. It does not provide a monad instance, and
-- 'mappend's together error values. 'MEither' is the monadic version, which
-- only holds onto the first error value. 'MEitherT' is a monad transformer.
--
-- Also, *Either datatypes and utility functions from Data.Either
-- are generalized with 'Neither' type class.

module Data.Neither
    ( -- * Applicative version
      AEither (..)
    , aeither
      -- * Monadic version
    , MEither (..)
    , meither
      -- * Monad transformer
    , MEitherT (..)
    , mapMEitherT
    , throwMEither
      -- * Neither typeclass
    , Neither (..)
      -- * Utility functions
    , mapLeft
    , mapRight
    , mapEither
    , lefts
    , rights
    , partitionEithers
    ) where

import Data.Neither.Base
import Data.Neither.Class
import Data.Neither.Transformers ()
import Data.Neither.Mtl ()