{-|
    Module      :  Data.Number.ER.RnToRm
    Description :  overview of AERN-RnToRm
    Copyright   :  (c) Michal Konecny
    License     :  BSD3

    Maintainer  :  mik@konecny.aow.cz
    Stability   :  experimental
    Portability :  non-portable (requires fenv.h)

    This module bundles some of the most important functionality
    of the AERN-RnToRm package.  
    It is intended to be imported *qualified*.

    AERN-RnToRm provides
    datatypes and abstractions for approximating functions
    of type @D -> R^m@ where @D@ is a bounded interval in @R^n@
    with non-empty interior.
    
    Abstractions are provided via 4 type classes:
     
     * 'UFB.ERUnitFnBase': 
        generalises polynomials with floating point coefficients.
        (/Not exported here, used only internally./)
        
     * 'ERFnApprox': 
        generalises functions enclosures on a certain unspecified domain.
     
     * 'UFA.ERUnitFnApprox' (extends 'ERFnApprox'): generalises function graph enclosures
        on the domain @[-1,1]^n@.
        (/Not exported here, used only internally./)
        
     * 'ERFnDomApprox' (extends 'ERFnApprox'):
        generalises function enclosures over a specified and queriable domain box
        (instance of class 'DomainBox').
        
     At all levels, all field operations are supported as well as
     some elementary operations, namely exp, sin and cos.
     Log and sqrt are planned to be added soon. 
        
     Implementations of 'UFB.ERUnitFnBase':
      
     * 'ERChebPoly' 
        
     By using the Chebyshev basis on domain @[-1,1]^n@, 
     we gain simple and optimally rounding degree reduction 
     as well as relatively simple handling of rounding 
     in other operations.

     Implementations of 'UFA.ERUnitFnApprox':
      
     * 'ERFnInterval'
     
     Implementations of 'ERFnDomApprox':
         
        * 'ERFnDomTranslApprox': 
            builds a basic implementation 
            using an instance of 'UFA.ERUnitFnApprox'.
        
        * 'ERFnTuple': 
            extends another implementation of 'ERFnDomApprox' 
            to work with lists of functions simultaneously.
        
        * 'ERFnDomEdgesApprox': 
            separately enclose a function on its domain box 
            as well as on all the domain's hyper-edges 
            (including the corners) using
            another implementation of 'ERFnDomApprox'.
        
        * 'ERFnPiecewise': 
            allows the domain box to be bisected 
            to an arbitrary finite depth 
            and uses another implementation of 'ERFnDomApprox' 
            to approximate the function on each segment. 
-}
module Data.Number.ER.RnToRm 
(
    module Data.Number.ER.RnToRm.DefaultRepr,
    module Data.Number.ER.RnToRm.Approx,
    module Data.Number.ER.Real.DomainBox
)
where

import Data.Number.ER.RnToRm.DefaultRepr
import Data.Number.ER.RnToRm.Approx
import Data.Number.ER.Real.DomainBox

import qualified Data.Number.ER.RnToRm.UnitDom.Approx as UFA
import qualified Data.Number.ER.RnToRm.UnitDom.Base as UFB

import qualified Data.Number.ER.Real.Approx as RA
import qualified Data.Number.ER.Real.Approx.Elementary as RAEL

import Data.Number.ER.RnToRm.UnitDom.ChebyshevBase.Polynom
import Data.Number.ER.RnToRm.UnitDom.Approx.Interval
import Data.Number.ER.RnToRm.Approx.DomTransl
import Data.Number.ER.RnToRm.Approx.DomEdges
import Data.Number.ER.RnToRm.Approx.Tuple
import Data.Number.ER.RnToRm.Approx.PieceWise