{-|
    Module      :  AERN2.Real
    Description :  Exact real numbers
    Copyright   :  (c) Michal Konecny
    License     :  BSD3

    Maintainer  :  mikkonecny@gmail.com
    Stability   :  experimental
    Portability :  portable

    Exact real numbers represented by Cauchy sequences of MPBalls.
-}
module AERN2.Real
(
   -- * real numbers and conversions
   CReal, 
   CSequence (..), 
   creal, HasCReals, CanBeCReal,
   cseqPrecisions, cseqIndexForPrecision, 
   cseqFromWithCurrentPrec, cseqFromPrecFunction,
   pi,
   crealFromWithCurrentPrec, crealFromPrecFunction,
   -- * limits
   HasLimits(..),
   -- * lazy Kleeneans
   CKleenean, CanBeCKleenean, ckleenean, CanSelect(..),
   -- * extracting approximations
   CanExtractApproximation(..), (?), bits, prec,
   -- * abstract real numbers
   RealNumber
)
where

import AERN2.Limit
import AERN2.Select
import AERN2.MP
import AERN2.MP.WithCurrentPrec
import AERN2.Real.Type
import AERN2.Real.Comparisons ()
import AERN2.Real.CKleenean
import AERN2.Real.Field ()
import AERN2.Real.Limit ()
import AERN2.Real.Elementary (pi)
-- import AERN2.Real.Tests ()

import MixedTypesNumPrelude
-- import qualified Prelude as P
import GHC.TypeLits

-- import Text.Printf
-- -- import AERN2.MP.Dyadic

class
    (OrderedField r
    , HasLimits Int r
    , HasLimits Integer r
    , HasLimits Rational r
    , CanSelect (OrderCompareType r r)
    , (CanTestCertainly (SelectType (OrderCompareType r r))))
    => 
    RealNumber r

instance RealNumber CReal
instance
    (KnownNat p) => 
    RealNumber (WithCurrentPrec p (CN MPBall))