packages feed

AERN-Real-2011.1: src/Numeric/AERN/RealArithmetic/RefinementOrderRounding/FieldOps.hs-boot

{-
  this file is needed to break the following dependency cycles:

  Numeric.AERN.RealArithmetic.NumericOrderRounding.InPlace.Elementary
    imports: Numeric.AERN.RealArithmetic.Measures
             Numeric.AERN.RealArithmetic.Laws
             Numeric.AERN.RealArithmetic.NumericOrderRounding.FieldOps
             Numeric.AERN.RealArithmetic.NumericOrderRounding.Elementary
  Numeric.AERN.RealArithmetic.Measures
    imports: Numeric.AERN.RealArithmetic.RefinementOrderRounding.FieldOps
  Numeric.AERN.RealArithmetic.RefinementOrderRounding.FieldOps
    imports: Numeric.AERN.RealArithmetic.Measures
             Numeric.AERN.RealArithmetic.Laws
             Numeric.AERN.RealArithmetic.NumericOrderRounding
  Numeric.AERN.RealArithmetic.Laws
    imports: Numeric.AERN.RealArithmetic.Measures
  Numeric.AERN.RealArithmetic.NumericOrderRounding
    imports: Numeric.AERN.RealArithmetic.NumericOrderRounding.InPlace
             Numeric.AERN.RealArithmetic.NumericOrderRounding.Elementary
             Numeric.AERN.RealArithmetic.NumericOrderRounding.MixedFieldOps
             Numeric.AERN.RealArithmetic.NumericOrderRounding.FieldOps
  Numeric.AERN.RealArithmetic.NumericOrderRounding.InPlace
    imports: Numeric.AERN.RealArithmetic.NumericOrderRounding.InPlace.Elementary
             Numeric.AERN.RealArithmetic.NumericOrderRounding.InPlace.MixedFieldOps
             Numeric.AERN.RealArithmetic.NumericOrderRounding.InPlace.FieldOps
  Numeric.AERN.RealArithmetic.NumericOrderRounding.InPlace.MixedFieldOps
    imports: Numeric.AERN.RealArithmetic.Measures
             Numeric.AERN.RealArithmetic.Laws
             Numeric.AERN.RealArithmetic.NumericOrderRounding.FieldOps
             Numeric.AERN.RealArithmetic.NumericOrderRounding.InPlace.FieldOps
             Numeric.AERN.RealArithmetic.NumericOrderRounding.MixedFieldOps
  Numeric.AERN.RealArithmetic.NumericOrderRounding.FieldOps
    imports: Numeric.AERN.RealArithmetic.Measures
             Numeric.AERN.RealArithmetic.Laws
  Numeric.AERN.RealArithmetic.NumericOrderRounding.InPlace.FieldOps
    imports: Numeric.AERN.RealArithmetic.Measures
             Numeric.AERN.RealArithmetic.Laws
             Numeric.AERN.RealArithmetic.NumericOrderRounding.FieldOps
  Numeric.AERN.RealArithmetic.NumericOrderRounding.MixedFieldOps
    imports: Numeric.AERN.RealArithmetic.Measures
             Numeric.AERN.RealArithmetic.Laws
             Numeric.AERN.RealArithmetic.NumericOrderRounding.FieldOps
  Numeric.AERN.RealArithmetic.NumericOrderRounding.Elementary
    imports: Numeric.AERN.RealArithmetic.Measures
             Numeric.AERN.RealArithmetic.Laws
             Numeric.AERN.RealArithmetic.NumericOrderRounding.FieldOps
  
-} 

{-# LANGUAGE TypeFamilies #-}
{-# LANGUAGE ImplicitParams #-}

module Numeric.AERN.RealArithmetic.RefinementOrderRounding.FieldOps where

import Numeric.AERN.RealArithmetic.ExactOps
import Numeric.AERN.RealArithmetic.RefinementOrderRounding.Conversion

import Numeric.AERN.Basics.Effort
import qualified Numeric.AERN.Basics.NumericOrder as NumOrd

class RoundedAddEffort t where
    type AddEffortIndicator t
    addDefaultEffort :: t -> AddEffortIndicator t

class (RoundedAddEffort t) => RoundedAdd t where
    addInEff :: AddEffortIndicator t -> t -> t -> t
    addOutEff :: AddEffortIndicator t -> t -> t -> t

class (RoundedAdd t, Neg t) => RoundedSubtr t where
    subtrInEff :: (AddEffortIndicator t) -> t -> t -> t
    subtrOutEff :: (AddEffortIndicator t) -> t -> t -> t
    subtrInEff effort a b = addInEff effort a (neg b)
    subtrOutEff effort a b = addOutEff effort a (neg b)