{-# LANGUAGE GeneralizedNewtypeDeriving #-}
-- |
-- Copyright   : (c) 2010, 2011 Simon Meier
-- License     : GPL v3 (see LICENSE)
-- 
-- Maintainer  : Simon Meier <iridcode@gmail.com>
-- Portability : GHC only
--
-- Computations that need a fresh name supply.
module Control.Monad.Fresh (

  -- * MonadFresh class
    MonadFresh(..)

  -- * The Fresh monad
  , Fresh
  , runFresh
  , evalFresh
  , execFresh

  -- * The fast FreshT monad transformer
  , FreshT(..)
  , freshT
  , runFreshT
  , evalFreshT
  , execFreshT

  -- * Fresh name generation
  , FreshState
  , nothingUsed

  , module Control.Monad
  , module Control.Monad.Fix
  , module Control.Monad.Trans

  ) where

import Control.Monad
import Control.Monad.Fix
import Control.Monad.Trans

import Control.Monad.Fresh.Class
import Control.Monad.Trans.FastFresh hiding (freshIdents)