module Control.Monad.Classes
  ( -- * State
    MonadState
  , state
  , get
  , put
  , modify
  , modify'
  , gets
    -- * Reader
  , MonadReader
  , MonadLocal
  , ask
  , local
    -- * Writer
  , MonadWriter
  , tell
    -- * Exceptions
  , MonadExcept
  , throw
    -- * Exec
  , MonadExec
  , exec
    -- * Core classes and types
    -- ** Generic lifting
  , MonadLiftN(..)
    -- ** Effects
  , module Control.Monad.Classes.Effects
    -- ** N-classes
  , Peano(..)
  , MonadStateN(..)
  , MonadReaderN(..)
  , MonadLocalN(..)
  , MonadWriterN(..)
  , MonadExceptN(..)
  , MonadExecN(..)
    -- ** Type families
    -- | You should rarely need these. They are exported mostly for
    -- documentation and pedagogical purposes.
  , Find
  , FindTrue
  , MapCanDo
  , CanDo
  ) where

import Control.Monad.Classes.Effects
import Control.Monad.Classes.Core
import Control.Monad.Classes.State
import Control.Monad.Classes.Reader
import Control.Monad.Classes.Writer
import Control.Monad.Classes.Except
import Control.Monad.Classes.Exec
import Data.Peano (Peano (..))