module AERN2.WithGlobalParam.Ring
(
)
where
import MixedTypesNumPrelude hiding (id)
import Control.CollectErrors
import AERN2.MP.Dyadic
import AERN2.QA.Protocol
import AERN2.WithGlobalParam.Type
import AERN2.WithGlobalParam.Helpers
instance
(QAArrow to, CanAddAsymmetric a b, SuitableForWGParam prm a, SuitableForWGParam prm b, SuitableForWGParam prm (AddType a b))
=>
CanAddAsymmetric (WithGlobalParamA to prm a) (WithGlobalParamA to prm b)
where
type AddType (WithGlobalParamA to prm a) (WithGlobalParamA to prm b) = WithGlobalParamA to prm (AddType a b)
add = binaryOp "+" add
$(declForTypes
[[t| Integer |], [t| Int |], [t| Rational |], [t| Dyadic |]]
(\ t -> [d|
instance
(QAArrow to, CanAddAsymmetric a $t, SuitableForWGParam prm a, SuitableForWGParam prm (AddType a $t))
=>
CanAddAsymmetric (WithGlobalParamA to prm a) $t
where
type AddType (WithGlobalParamA to prm a) $t = WithGlobalParamA to prm (AddType a $t)
add = binaryOpWithPureArg "+" add
instance
(QAArrow to, CanAddAsymmetric $t b, SuitableForWGParam prm b, SuitableForWGParam prm (AddType $t b))
=>
CanAddAsymmetric $t (WithGlobalParamA to prm b)
where
type AddType $t (WithGlobalParamA to prm b) = WithGlobalParamA to prm (AddType $t b)
add = flip $ binaryOpWithPureArg "+" (flip add)
|]))
instance
(CanAddAsymmetric (WithGlobalParamA to prm a) b
, CanEnsureCE es b
, CanEnsureCE es (AddType (WithGlobalParamA to prm a) b)
, SuitableForCE es)
=>
CanAddAsymmetric (WithGlobalParamA to prm a) (CollectErrors es b)
where
type AddType (WithGlobalParamA to prm a) (CollectErrors es b) =
EnsureCE es (AddType (WithGlobalParamA to prm a) b)
add = lift2TLCE add
instance
(CanAddAsymmetric a (WithGlobalParamA to prm b)
, CanEnsureCE es a
, CanEnsureCE es (AddType a (WithGlobalParamA to prm b))
, SuitableForCE es)
=>
CanAddAsymmetric (CollectErrors es a) (WithGlobalParamA to prm b)
where
type AddType (CollectErrors es a) (WithGlobalParamA to prm b) =
EnsureCE es (AddType a (WithGlobalParamA to prm b))
add = lift2TCE add
instance
(QAArrow to, CanSub a b, SuitableForWGParam prm a, SuitableForWGParam prm b, SuitableForWGParam prm (SubType a b))
=>
CanSub (WithGlobalParamA to prm a) (WithGlobalParamA to prm b)
where
type SubType (WithGlobalParamA to prm a) (WithGlobalParamA to prm b) = WithGlobalParamA to prm (SubType a b)
sub = binaryOp "-" sub
$(declForTypes
[[t| Integer |], [t| Int |], [t| Rational |], [t| Dyadic |]]
(\ t -> [d|
instance
(QAArrow to, CanSub a $t, SuitableForWGParam prm a, SuitableForWGParam prm (SubType a $t))
=>
CanSub (WithGlobalParamA to prm a) $t
where
type SubType (WithGlobalParamA to prm a) $t = WithGlobalParamA to prm (SubType a $t)
sub = binaryOpWithPureArg "-" sub
instance
(QAArrow to, CanSub $t b, SuitableForWGParam prm b, SuitableForWGParam prm (SubType $t b))
=>
CanSub $t (WithGlobalParamA to prm b)
where
type SubType $t (WithGlobalParamA to prm b) = WithGlobalParamA to prm (SubType $t b)
sub = flip $ binaryOpWithPureArg "-" (flip sub)
|]))
instance
(CanSub (WithGlobalParamA to prm a) b
, CanEnsureCE es b
, CanEnsureCE es (SubType (WithGlobalParamA to prm a) b)
, SuitableForCE es)
=>
CanSub (WithGlobalParamA to prm a) (CollectErrors es b)
where
type SubType (WithGlobalParamA to prm a) (CollectErrors es b) =
EnsureCE es (SubType (WithGlobalParamA to prm a) b)
sub = lift2TLCE sub
instance
(CanSub a (WithGlobalParamA to prm b)
, CanEnsureCE es a
, CanEnsureCE es (SubType a (WithGlobalParamA to prm b))
, SuitableForCE es)
=>
CanSub (CollectErrors es a) (WithGlobalParamA to prm b)
where
type SubType (CollectErrors es a) (WithGlobalParamA to prm b) =
EnsureCE es (SubType a (WithGlobalParamA to prm b))
sub = lift2TCE sub
instance
(QAArrow to, CanMulAsymmetric a b
, SuitableForWGParam prm a, SuitableForWGParam prm b, SuitableForWGParam prm (MulType a b))
=>
CanMulAsymmetric (WithGlobalParamA to prm a) (WithGlobalParamA to prm b)
where
type MulType (WithGlobalParamA to prm a) (WithGlobalParamA to prm b) = WithGlobalParamA to prm (MulType a b)
mul =
binaryOp "*" mul
instance
(CanMulAsymmetric (WithGlobalParamA to prm a) b
, CanEnsureCE es b
, CanEnsureCE es (MulType (WithGlobalParamA to prm a) b)
, SuitableForCE es)
=>
CanMulAsymmetric (WithGlobalParamA to prm a) (CollectErrors es b)
where
type MulType (WithGlobalParamA to prm a) (CollectErrors es b) =
EnsureCE es (MulType (WithGlobalParamA to prm a) b)
mul = lift2TLCE mul
instance
(CanMulAsymmetric a (WithGlobalParamA to prm b)
, CanEnsureCE es a
, CanEnsureCE es (MulType a (WithGlobalParamA to prm b))
, SuitableForCE es)
=>
CanMulAsymmetric (CollectErrors es a) (WithGlobalParamA to prm b)
where
type MulType (CollectErrors es a) (WithGlobalParamA to prm b) =
EnsureCE es (MulType a (WithGlobalParamA to prm b))
mul = lift2TCE mul
$(declForTypes
[[t| Integer |], [t| Int |], [t| Rational |], [t| Dyadic |]]
(\ t -> [d|
instance
(QAArrow to, CanMulAsymmetric a $t, SuitableForWGParam prm a, SuitableForWGParam prm (MulType a $t))
=>
CanMulAsymmetric (WithGlobalParamA to prm a) $t
where
type MulType (WithGlobalParamA to prm a) $t = WithGlobalParamA to prm (MulType a $t)
mul = binaryOpWithPureArg "*" mul
instance
(QAArrow to, CanMulAsymmetric $t b, SuitableForWGParam prm b, SuitableForWGParam prm (MulType $t b))
=>
CanMulAsymmetric $t (WithGlobalParamA to prm b)
where
type MulType $t (WithGlobalParamA to prm b) = WithGlobalParamA to prm (MulType $t b)
mul = flip $ binaryOpWithPureArg "*" (flip mul)
|]))