#if !MIN_VERSION_ghc(8,4,0) /* ghc-8.0, ghc-8.2 */
{-# LANGUAGE TypeFamilies #-}
#endif


module Language.Haskell.Brittany.Internal.Prelude
  ( module E
  , module Language.Haskell.Brittany.Internal.Prelude
  )
where



-- rather project-specific stuff:
---------------------------------
#if MIN_VERSION_ghc(8,4,0) /* ghc-8.4 */
import HsExtension                    as E ( GhcPs )
#endif

import RdrName                        as E ( RdrName )



-- more general:
----------------

import Data.Functor.Identity         as E ( Identity(..) )
import Control.Concurrent.Chan       as E ( Chan )
import Control.Concurrent.MVar       as E ( MVar )
import Data.Int                      as E ( Int )
import Data.Word                     as E ( Word )
import Prelude                       as E ( Integer
                                          , Float
                                          , Double
                                          )
import Control.Monad.ST              as E ( ST )
import Data.Bool                     as E ( Bool(..) )
import Data.Char                     as E ( Char )
import Data.Either                   as E ( Either(..) )
import Data.IORef                    as E ( IORef )
import Data.Maybe                    as E ( Maybe(..) )
import Data.Semigroup                as E ( Option(..) )
import Data.Monoid                   as E ( Endo(..)
                                          , All(..)
                                          , Any(..)
                                          , Sum(..)
                                          , Product(..)
                                          , Alt(..)
                                          )
import Data.Ord                      as E ( Ordering(..)
                                          , Down(..)
                                          )
import Data.Ratio                    as E ( Ratio
                                          , Rational
                                          )
import Data.String                   as E ( String )
import Data.Void                     as E ( Void )
import System.IO                     as E ( IO )
import Data.Proxy                    as E ( Proxy(..) )
import Data.Sequence                 as E ( Seq )

import Data.Map                      as E ( Map )
import Data.Set                      as E ( Set )

import Data.Text                     as E ( Text )

import Prelude                       as E ( Char
                                          , String
                                          , Int
                                          , Integer
                                          , Float
                                          , Double
                                          , Bool (..)
                                          , undefined
                                          , Eq (..)
                                          , Ord (..)
                                          , Enum (..)
                                          , Bounded (..)
                                          , Maybe (..)
                                          , Either (..)
                                          , IO
                                          , (<$>)
                                          , (.)
                                          , ($)
                                          , ($!)
                                          , Num (..)
                                          , Integral (..)
                                          , Fractional (..)
                                          , Floating (..)
                                          , RealFrac (..)
                                          , RealFloat (..)
                                          , fromIntegral
                                          , error
                                          , foldr
                                          , foldl
                                          , foldr1
                                          , id
                                          , map
                                          , subtract
                                          , putStrLn
                                          , putStr
                                          , Show (..)
                                          , print
                                          , fst
                                          , snd
                                          , (++)
                                          , not
                                          , (&&)
                                          , (||)
                                          , curry
                                          , uncurry
                                          , Ordering (..)
                                          , flip
                                          , const
                                          , seq
                                          , reverse
                                          , otherwise
                                          , traverse
                                          , realToFrac
                                          , or
                                          , and
                                          , head
                                          , any
                                          , (^)
                                          , Foldable
                                          , Traversable
                                          )

import Data.Function                 as E ( fix
                                          )

import Data.Foldable                 as E ( foldl'
                                          , foldr'
                                          , fold
                                          , asum
                                          )

import Data.List                     as E ( partition
                                          , null
                                          , elem
                                          , notElem
                                          , minimum
                                          , maximum
                                          , length
                                          , all
                                          , take
                                          , drop
                                          , find
                                          , sum
                                          , zip
                                          , zip3
                                          , zipWith
                                          , repeat
                                          , replicate
                                          , iterate
                                          , nub
                                          , filter
                                          , intersperse
                                          , intercalate
                                          , isSuffixOf
                                          , isPrefixOf
                                          , dropWhile
                                          , takeWhile
                                          , unzip
                                          , break
                                          , transpose
                                          , sortBy
                                          , mapAccumL
                                          , mapAccumR
                                          , uncons
                                          )

import Data.List.NonEmpty            as E ( NonEmpty(..)
                                          , nonEmpty
                                          )

import Data.Tuple                    as E ( swap
                                          )

import Data.Char                     as E ( ord
                                          , chr
                                          )

import Data.Maybe                    as E ( fromMaybe
                                          , maybe
                                          , listToMaybe
                                          , maybeToList
                                          , catMaybes
                                          )

import Data.Word                     as E ( Word32
                                          )

import Data.Ord                      as E ( comparing
                                          , Down (..)
                                          )

import Data.Either                   as E ( either
                                          )

import Data.Ratio                    as E ( Ratio
                                          , (%)
                                          , numerator
                                          , denominator
                                          )

import Text.Read                     as E ( readMaybe
                                          )

import Control.Monad                 as E ( Functor (..)
                                          , Monad (..)
                                          , MonadPlus (..)
                                          , mapM
                                          , mapM_
                                          , forM
                                          , forM_
                                          , sequence
                                          , sequence_
                                          , (=<<)
                                          , (>=>)
                                          , (<=<)
                                          , forever
                                          , void
                                          , join
                                          , replicateM
                                          , replicateM_
                                          , guard
                                          , when
                                          , unless
                                          , liftM
                                          , liftM2
                                          , liftM3
                                          , liftM4
                                          , liftM5
                                          , filterM
                                          , (<$!>)
                                          )

import Control.Applicative           as E ( Applicative (..)
                                          , Alternative (..)
                                          )

import Foreign.Storable              as E ( Storable )
import GHC.Exts                      as E ( Constraint )

import Control.Concurrent            as E ( threadDelay
                                          , forkIO
                                          , forkOS
                                          )

import Control.Concurrent.MVar       as E ( MVar
                                          , newEmptyMVar
                                          , newMVar
                                          , putMVar
                                          , readMVar
                                          , takeMVar
                                          , swapMVar
                                          )

import Control.Exception             as E ( evaluate
                                          , bracket
                                          , assert
                                          )

import Debug.Trace                   as E ( trace
                                          , traceId
                                          , traceShowId
                                          , traceShow
                                          , traceStack
                                          , traceShowId
                                          , traceIO
                                          , traceM
                                          , traceShowM
                                          )

import Foreign.ForeignPtr            as E ( ForeignPtr
                                          )

import Data.Monoid                   as E ( mconcat
                                          , Monoid (..)
                                          )

import Data.Bifunctor                as E ( bimap )
import Data.Functor                  as E ( (<$), ($>) )
import Data.Function                 as E ( (&) )
import Data.Semigroup                as E ( (<>)
                                          , Semigroup(..)
                                          )
import System.IO                     as E ( hFlush
                                          , stdout
                                          )

import Data.Typeable                 as E ( Typeable
                                          )

import Control.Arrow                 as E ( first
                                          , second
                                          , (***)
                                          , (&&&)
                                          , (>>>)
                                          , (<<<)
                                          )

import Data.Functor.Identity         as E ( Identity (..)
                                          )

import Data.Proxy                    as E ( Proxy (..)
                                          )

import Data.Version                  as E ( showVersion
                                          )

import Data.List.Extra               as E ( nubOrd
                                          , stripSuffix
                                          )
import Control.Monad.Extra           as E ( whenM
                                          , unlessM
                                          , ifM
                                          , notM
                                          , orM
                                          , andM
                                          , anyM
                                          , allM
                                          )

import Data.Tree                     as E ( Tree(..)
                                          )

import Control.Monad.Trans.MultiRWS  as E ( -- MultiRWST (..)
                                          -- , MultiRWSTNull
                                          -- , MultiRWS
                                          -- ,
                                            MonadMultiReader(..)
                                          , MonadMultiWriter(..)
                                          , MonadMultiState(..)
                                          , mGet
                                          -- , runMultiRWST
                                          -- , runMultiRWSTASW
                                          -- , runMultiRWSTW
                                          -- , runMultiRWSTAW
                                          -- , runMultiRWSTSW
                                          -- , runMultiRWSTNil
                                          -- , runMultiRWSTNil_
                                          -- , withMultiReader
                                          -- , withMultiReader_
                                          -- , withMultiReaders
                                          -- , withMultiReaders_
                                          -- , withMultiWriter
                                          -- , withMultiWriterAW
                                          -- , withMultiWriterWA
                                          -- , withMultiWriterW
                                          -- , withMultiWriters
                                          -- , withMultiWritersAW
                                          -- , withMultiWritersWA
                                          -- , withMultiWritersW
                                          -- , withMultiState
                                          -- , withMultiStateAS
                                          -- , withMultiStateSA
                                          -- , withMultiStateA
                                          -- , withMultiStateS
                                          -- , withMultiState_
                                          -- , withMultiStates
                                          -- , withMultiStatesAS
                                          -- , withMultiStatesSA
                                          -- , withMultiStatesA
                                          -- , withMultiStatesS
                                          -- , withMultiStates_
                                          -- , inflateReader
                                          -- , inflateMultiReader
                                          -- , inflateWriter
                                          -- , inflateMultiWriter
                                          -- , inflateState
                                          -- , inflateMultiState
                                          -- , mapMultiRWST
                                          -- , mGetRawR
                                          -- , mGetRawW
                                          -- , mGetRawS
                                          -- , mPutRawR
                                          -- , mPutRawW
                                          -- , mPutRawS
                                          )

import Control.Monad.Trans.MultiReader    ( runMultiReaderTNil
                                          , runMultiReaderTNil_
                                          , MultiReaderT (..)
                                          , MultiReader
                                          , MultiReaderTNull
                                          )

import Data.Text                     as E ( Text )

import Control.Monad.IO.Class        as E ( MonadIO (..)
                                          )

import Control.Monad.Trans.Class     as E ( lift
                                          )
import Control.Monad.Trans.Maybe     as E ( MaybeT (..)
                                          )

import Data.Data                     as E ( toConstr
                                          )

todo :: a
todo = error "todo"


#if !MIN_VERSION_ghc(8,4,0) /* ghc-8.0, ghc-8.2 */
type family IdP p
type instance IdP GhcPs = RdrName

type GhcPs = RdrName
#endif