-- |
-- Bidirectional functions.
-- The type 'Data.Invertible.Bijection.<->' is the basis, representing a bijective function between two types.
-- Bijections can be constructed from two functions with 'Control.Invertible.BiArrow.<->' or from a set of Haskell cases using 'biCase'.
--
-- This and other modules in this package export functionality generally mirroring that provided by the base modules, but over bijections.  They are thus intended to be imported qualified, e.g.,:
-- 
-- > import qualified Data.Invertible as Inv
--
{-# LANGUAGE CPP #-}
#if !(defined(VERSION_semigroupoids) && MIN_VERSION_semigroupoids(5,2,2))
{-# LANGUAGE Safe #-}
#endif
module Data.Invertible
  ( module Data.Invertible.Bijection
  , module Data.Invertible.TH
  , module Data.Invertible.Prelude
  , module Data.Invertible.Bits
  , module Data.Invertible.Bool
  , module Data.Invertible.Complex
  , module Data.Invertible.Either
  , module Data.Invertible.Function
  , module Data.Invertible.Functor
  , module Data.Invertible.List
  , module Data.Invertible.Maybe
  , module Data.Invertible.Monad
  , module Data.Invertible.Monoid
  , module Data.Invertible.Ord
  , module Data.Invertible.Tuple
  , module Control.Invertible.BiArrow
  , module Control.Invertible.Functor
  ) where

import Data.Invertible.Bijection
import Data.Invertible.TH
import Data.Invertible.Prelude
import Data.Invertible.Bits
import Data.Invertible.Bool
import Data.Invertible.Complex
import Data.Invertible.Either
import Data.Invertible.Function
import Data.Invertible.Functor
import Data.Invertible.List
import Data.Invertible.Maybe
import Data.Invertible.Monad
import Data.Invertible.Monoid
import Data.Invertible.Ord
import Data.Invertible.Tuple
import Control.Invertible.BiArrow
import Control.Invertible.Functor