{-# LANGUAGE RebindableSyntax #-}

-----------------------------------------------------------------------------
-- |
-- Module      :  Prelude.YAP
-- Copyright   :  (c) The University of Glasgow 2001
-- License     :  BSD-style (see the file libraries/base/LICENSE)
-- 
-- Maintainer  :  ross@soi.city.ac.uk
-- Stability   :  provisional
-- Portability :  portable
--
-- A replacement for the standard Prelude, aiming to preserve
-- compatibility for clients as far as possible.
-- To use this module, you'll need to turn on @RebindableSyntax@, which
-- also turns off the implicit import of the standard @Prelude@.
--
-- For greater backwards compatibility, this module hides the names of
-- the classes @AbelianGroup@, @Ring@, @Field@ and @EuclideanDomain@,
-- and their new methods @zero@, @unit@ and @associate@.  To use
-- those names, e.g. to define instances, you'll also need to import
-- "Data.YAP.Algebra".
--
-----------------------------------------------------------------------------

module Prelude.YAP (
    -- * Standard Haskell prelude
    module Prelude,
    -- ** Compatibility classes
    module Data.YAP.Algebra,
    Num(..), Real(..), Fractional(..), Integral(..),
    -- ** Unchanged classes
    RealFrac(..), Floating(..), RealFloat(..),
    -- ** Numeric functions
    even, odd, (^), (^^), fromIntegral, realToFrac,
  ) where

import Prelude hiding (
    Num(..), Real(..), Integral(..), Fractional(..),
    Floating(..), RealFrac(..), RealFloat(..),
    subtract, even, odd, gcd, lcm, (^), (^^), fromIntegral, realToFrac)
import Data.YAP.Algebra hiding (
    AbelianGroup(zero), Ring, EuclideanDomain(associate, unit), Field)
import Prelude.YAP.Internal