module AERN2.WithGlobalParam.Helpers
(
unaryOp, binaryOp, binaryOpWithPureArg
)
where
#ifdef DEBUG
import Debug.Trace (trace)
#define maybeTrace trace
#define maybeTraceIO putStrLn
#else
#define maybeTrace (\ (_ :: String) t -> t)
#define maybeTraceIO (\ (_ :: String) -> return ())
#endif
import MixedTypesNumPrelude
import Control.Arrow
import AERN2.QA.Protocol
import AERN2.WithGlobalParam.Type
unaryOp ::
(QAArrow to, SuitableForWGParam prm a, SuitableForWGParam prm b)
=>
String ->
(a -> b) ->
WithGlobalParamA to prm a -> WithGlobalParamA to prm b
unaryOp name op aWGPrm =
newWGParam samplePrm (op sampleA) name [AnyProtocolQA aWGPrm] makeQ
where
WithGlobalParamP samplePrm sampleA = qaProtocol aWGPrm
makeQ (me, _src) =
proc ac ->
do
a <- wgprmQuery aWGPrm me -< ac
returnA -< op a
binaryOpWithPureArg ::
(QAArrow to, SuitableForWGParam prm a, SuitableForWGParam prm c)
=>
String -> (a -> t -> c) -> WithGlobalParamA to prm a -> t -> WithGlobalParamA to prm c
binaryOpWithPureArg name op aWGPrm b =
newWGParam samplePrm (op sampleA b) name [AnyProtocolQA aWGPrm] makeQ
where
WithGlobalParamP samplePrm sampleA = qaProtocol aWGPrm
makeQ (me, _src) =
proc ac ->
do
a <- wgprmQuery aWGPrm me -< ac
returnA -< op a b
binaryOp ::
(QAArrow to, SuitableForWGParam prm a, SuitableForWGParam prm b, SuitableForWGParam prm c)
=>
String -> (a -> b -> c) -> WithGlobalParamA to prm a -> WithGlobalParamA to prm b -> WithGlobalParamA to prm c
binaryOp name op aWGPrm bWGPrm =
newWGParam samplePrm (op sampleA sampleB) name [AnyProtocolQA aWGPrm, AnyProtocolQA bWGPrm] makeQ
where
WithGlobalParamP samplePrm sampleA = qaProtocol aWGPrm
WithGlobalParamP _ sampleB = qaProtocol bWGPrm
makeQ (me, _src) =
proc ac ->
do
a <- wgprmQuery aWGPrm me -< ac
b <- wgprmQuery bWGPrm me -< ac
returnA -< op a b