module MPrelude (module Exports, identity) where

import Control.Applicative as Exports
  ( Alternative
  , Applicative
  , (<*>)
  , (<|>)
  , empty
  , pure
  )

import Control.Monad as Exports
  ( Monad
  , (<=<)
  , (=<<)
  , (>>)
  , (>>=)
  , void
  )

import Control.Monad.Fail as Exports
  ( MonadFail
  , fail
  )

import Control.Monad.IO.Class as Exports
  ( MonadIO
  , liftIO
  )

import Control.Monad.IO.Unlift  as Exports
  ( MonadUnliftIO
  )

import Data.Bool as Exports
  ( Bool(..)
  , (&&)
  , (||)
  , not
  , otherwise
  )

import Data.Coerce as Exports
  ( coerce
  )

import Data.Either as Exports
  ( Either(Left, Right)
  , either
  )

import Data.Eq as Exports
  ( Eq
  , (/=)
  , (==)
  )

import Data.Foldable as Exports
  ( Foldable
  , traverse_
  )

import Data.Function as Exports
  ( ($)
  , (&)
  , (.)
  , const
  , flip
  )

import Data.Functor as Exports
  ( Functor
  , ($>)
  , (<$)
  , (<$>)
  , (<&>)
  , fmap
  )

import Data.Maybe as Exports
  ( Maybe(Just)
  , fromMaybe
  , listToMaybe
  , maybe
  )

import Data.Monoid as Exports
  ( Monoid
  , mempty
  )

import Data.Ord as Exports
  ( Ord
  , (<)
  , (<=)
  , (>)
  , (>=)
  )

import Data.Semigroup as Exports
  ( Semigroup
  , (<>)
  )

import Data.String as Exports
  ( String
  )

import Data.Text as Exports
  ( Text
  )

import Data.Traversable as Exports
  ( traverse
  )

import Data.Tuple as Exports
  ( uncurry
  )

import GHC.Enum as Exports
  ( Bounded
  , Enum
  , maxBound
  , minBound
  )

import GHC.Generics as Exports
  ( Generic
  )

import GHC.Num as Exports
  ( Num
  , (*)
  , (+)
  )

import Numeric.Natural as Exports
  ( Natural
  )

import System.IO as Exports
  ( IO
  )

import Text.Show as Exports
  ( Show
  , show
  )

identity :: a -> a
identity :: a -> a
identity a
value = a
value