module AERN2.WithGlobalParam.Elementary
()
where
import MixedTypesNumPrelude
import Control.CollectErrors
import AERN2.MP.Dyadic
import AERN2.QA.Protocol
import AERN2.WithGlobalParam.Type
import AERN2.WithGlobalParam.Helpers
import AERN2.WithGlobalParam.Ring ()
import AERN2.WithGlobalParam.Field ()
instance
(QAArrow to, CanExp a
, SuitableForWGParam prm a, SuitableForWGParam prm (ExpType a))
=>
CanExp (WithGlobalParamA to prm a)
where
type ExpType (WithGlobalParamA to prm a) = WithGlobalParamA to prm (ExpType a)
exp = unaryOp "exp" exp
instance
(QAArrow to, CanLog a
, SuitableForWGParam prm a, SuitableForWGParam prm (LogType a))
=>
CanLog (WithGlobalParamA to prm a)
where
type LogType (WithGlobalParamA to prm a) = WithGlobalParamA to prm (LogType a)
log = unaryOp "log" log
instance
(QAArrow to, CanPow a e
, SuitableForWGParam prm a, SuitableForWGParam prm e
, SuitableForWGParam prm (PowTypeNoCN a e)
, SuitableForWGParam prm (PowType a e))
=>
CanPow (WithGlobalParamA to prm a) (WithGlobalParamA to prm e)
where
type PowTypeNoCN (WithGlobalParamA to prm a) (WithGlobalParamA to prm e) = WithGlobalParamA to prm (PowTypeNoCN a e)
powNoCN = binaryOp "^!" powNoCN
type PowType (WithGlobalParamA to prm a) (WithGlobalParamA to prm e) = WithGlobalParamA to prm (PowType a e)
pow = binaryOp "^" pow
instance
(CanPow (WithGlobalParamA to prm a) b
, CanEnsureCE es b
, CanEnsureCE es (PowTypeNoCN (WithGlobalParamA to prm a) b)
, CanEnsureCE es (PowType (WithGlobalParamA to prm a) b)
, SuitableForCE es)
=>
CanPow (WithGlobalParamA to prm a) (CollectErrors es b)
where
type PowTypeNoCN (WithGlobalParamA to prm a) (CollectErrors es b) =
EnsureCE es (PowTypeNoCN (WithGlobalParamA to prm a) b)
powNoCN = lift2TLCE powNoCN
type PowType (WithGlobalParamA to prm a) (CollectErrors es b) =
EnsureCE es (PowType (WithGlobalParamA to prm a) b)
pow = lift2TLCE pow
instance
(CanPow a (WithGlobalParamA to prm b)
, CanEnsureCE es a
, CanEnsureCE es (PowType a (WithGlobalParamA to prm b))
, CanEnsureCE es (PowTypeNoCN a (WithGlobalParamA to prm b))
, SuitableForCE es)
=>
CanPow (CollectErrors es a) (WithGlobalParamA to prm b)
where
type PowTypeNoCN (CollectErrors es a) (WithGlobalParamA to prm b) =
EnsureCE es (PowTypeNoCN a (WithGlobalParamA to prm b))
powNoCN = lift2TCE powNoCN
type PowType (CollectErrors es a) (WithGlobalParamA to prm b) =
EnsureCE es (PowType a (WithGlobalParamA to prm b))
pow = lift2TCE pow
$(declForTypes
[[t| Integer |], [t| Int |], [t| Dyadic |], [t| Rational |]]
(\ t -> [d|
instance
(QAArrow to, CanPow a $t
, SuitableForWGParam prm a
, SuitableForWGParam prm (PowTypeNoCN a $t)
, SuitableForWGParam prm (PowType a $t))
=>
CanPow (WithGlobalParamA to prm a) $t where
type PowTypeNoCN (WithGlobalParamA to prm a) $t =
WithGlobalParamA to prm (PowTypeNoCN a $t)
powNoCN = binaryOpWithPureArg "^" powNoCN
type PowType (WithGlobalParamA to prm a) $t =
WithGlobalParamA to prm (PowType a $t)
pow = binaryOpWithPureArg "^" pow
instance
(QAArrow to, CanPow $t a
, SuitableForWGParam prm a
, SuitableForWGParam prm (PowTypeNoCN $t a)
, SuitableForWGParam prm (PowType $t a))
=>
CanPow $t (WithGlobalParamA to prm a) where
type PowTypeNoCN $t (WithGlobalParamA to prm a) =
WithGlobalParamA to prm (PowTypeNoCN $t a)
powNoCN = flip $ binaryOpWithPureArg "^" (flip powNoCN)
type PowType $t (WithGlobalParamA to prm a) =
WithGlobalParamA to prm (PowType $t a)
pow = flip $ binaryOpWithPureArg "^" (flip pow)
|]))
instance
(QAArrow to, CanSqrt a
, CanMinMaxThis a Integer
, SuitableForWGParam prm a, SuitableForWGParam prm (SqrtType a))
=>
CanSqrt (WithGlobalParamA to prm a)
where
type SqrtType (WithGlobalParamA to prm a) = WithGlobalParamA to prm (SqrtType a)
sqrt = unaryOp "sqrt" sqrt
instance
(QAArrow to, CanSinCos a
, SuitableForWGParam prm a, SuitableForWGParam prm (SinCosType a))
=>
CanSinCos (WithGlobalParamA to prm a)
where
type SinCosType (WithGlobalParamA to prm a) = WithGlobalParamA to prm (SinCosType a)
cos = unaryOp "cos" cos
sin = unaryOp "sin" sin