Module      :  Data.Number.ER.Real.DefaultRepr
    Description :  concise names for default function representations
    Copyright   :  (c) 2007-2008 Michal Konecny
    License     :  BSD3

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

    This module supplies default instances for the real number and function classes
    described in "Data.Number.ER.RnToRm".
    These classes form loosely coupled boundaries between abstraction layers.
    Nevertheless, we usually have particular implementations in mind, as shown here.
    To preserve the intended loose coupling, please use these definitions
    only in functions that cannot infer from their input or output data which type of function enclosures
    they should use.  Eg a function to add 1 to an enclosure should have the type:
    > add1 :: (ERFnApprox box varid domra ranra fa) => fa -> fa
    > add1 f = f + 1
    and /not/: @add1 :: FAPWP -> FAPWP@
module Data.Number.ER.RnToRm.DefaultRepr
    module Data.Number.ER.RnToRm.DefaultRepr,
    module Data.Number.ER.BasicTypes.DomainBox.IntMap

import Data.Number.ER.Real.DefaultRepr
import qualified Data.Number.ER.RnToRm.Approx as FA
import qualified Data.Number.ER.RnToRm.UnitDom.Approx as UFA
import qualified Data.Number.ER.Real.Approx as RA
import qualified Data.Number.ER.Real.Approx.Elementary as RAEL
import qualified Data.Number.ER.BasicTypes.DomainBox as DBox
import Data.Number.ER.BasicTypes

import Data.Number.ER.BasicTypes.DomainBox.IntMap

import Data.Number.ER.RnToRm.UnitDom.Base
import Data.Number.ER.RnToRm.UnitDom.ChebyshevBase.Polynom
import Data.Number.ER.RnToRm.UnitDom.Approx.Interval
import Data.Number.ER.RnToRm.UnitDom.Approx.IntervalOI
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

--import BinaryDerive

import qualified Data.Map as Map

type P b = ERChebPoly (Box Int) b
type FAPU b = ERFnInterval (P b)
type FAPUOI b = ERFnIntervalOI (P b)
type FAPD b = ERFnDomTranslApprox (Box (DomTransl (IRA b))) VarID (FAPU b) (IRA b)
type FAPDOI b = ERFnDomTranslApprox (Box (DomTransl (IRA b))) VarID (FAPUOI b) (IRA b)
type FAPT b = ERFnTuple (FAPD b)
type FAPE b = ERFnDomEdgesApprox VarID (FAPT b)
type FAPWP b = ERFnPiecewise (Box (IRA b)) VarID (IRA b) (FAPE b)

--type FA = FAPWL
type FA = FAPWP B