Safe Haskell | None |
---|---|
Language | Haskell98 |
Observable
Contents
Description
Netrium is Copyright Anthony Waite, Dave Hetwett, Shaun Laurens 2009-2015, and files herein are licensed |under the MIT license, the text of which can be found in license.txt
- data Obs a where
- Const :: (Show a, Eq a) => a -> Obs a
- Var :: VarName -> Obs Double
- NamedVal :: VarName -> Obs Double
- NamedCond :: VarName -> Obs Bool
- At :: Time -> Obs Bool
- After :: Time -> Obs Bool
- Before :: Time -> Obs Bool
- UnOp :: UnOp a b -> Obs a -> Obs b
- BinOp :: BinOp a a b -> Obs a -> Obs a -> Obs b
- IfThen :: Obs Bool -> Obs a -> Obs a -> Obs a
- konst :: (Show a, Eq a) => a -> Obs a
- type VarName = String
- primVar :: VarName -> Obs Double
- primCond :: VarName -> Obs Bool
- var :: VarName -> Obs Double
- type Time = UTCTime
- mkdate :: Integer -> Int -> Int -> Time
- at :: Time -> Obs Bool
- before :: Time -> Obs Bool
- after :: Time -> Obs Bool
- between :: Time -> Time -> Obs Bool
- (%==) :: Obs Double -> Obs Double -> Obs Bool
- (%>) :: Obs Double -> Obs Double -> Obs Bool
- (%>=) :: Obs Double -> Obs Double -> Obs Bool
- (%<) :: Obs Double -> Obs Double -> Obs Bool
- (%<=) :: Obs Double -> Obs Double -> Obs Bool
- (%&&) :: Obs Bool -> Obs Bool -> Obs Bool
- (%||) :: Obs Bool -> Obs Bool -> Obs Bool
- (%+) :: Obs Double -> Obs Double -> Obs Double
- (%-) :: Obs Double -> Obs Double -> Obs Double
- (%*) :: Obs Double -> Obs Double -> Obs Double
- (%/) :: Obs Double -> Obs Double -> Obs Double
- ifthen :: Obs Bool -> Obs a -> Obs a -> Obs a
- negate :: Num a => a -> a
- not :: Obs Bool -> Obs Bool
- max :: Obs Double -> Obs Double -> Obs Double
- min :: Obs Double -> Obs Double -> Obs Double
- abs :: Num a => a -> a
- parseObsCond :: XMLParser (Obs Bool)
- parseObsReal :: XMLParser (Obs Double)
- printObs :: Obs a -> Content ()
- eval :: Time -> Obs a -> Steps a
- data Steps a
- subst :: VarName -> Double -> Obs a -> Obs a
- isTrue :: Time -> Obs Bool -> Bool
- isFalse :: Time -> Obs Bool -> Bool
- nextTrue :: Time -> Obs Bool -> Maybe Time
- nextFalse :: Time -> Obs Bool -> Maybe Time
- evermoreTrue :: Time -> Obs Bool -> Bool
- evermoreFalse :: Time -> Obs Bool -> Bool
- timeHorizon :: Time -> Obs Bool -> Maybe Time
- earliestTimeHorizon :: Time -> [(Obs Bool, a)] -> Maybe (Time, a)
- simplifyWithinHorizon :: Time -> Time -> Obs Bool -> Obs Bool
Creating observables
A simple expression language of "observable values".
An observable represents is a time-varying value (a function from
Time
to a value).
Currently there are two types of observables:
- condition observables, type
Obs Bool
- real-valued observables, type
Obs Double
Constructors
Const :: (Show a, Eq a) => a -> Obs a | |
Var :: VarName -> Obs Double | |
NamedVal :: VarName -> Obs Double | |
NamedCond :: VarName -> Obs Bool | |
At :: Time -> Obs Bool | |
After :: Time -> Obs Bool | |
Before :: Time -> Obs Bool | |
UnOp :: UnOp a b -> Obs a -> Obs b | |
BinOp :: BinOp a a b -> Obs a -> Obs a -> Obs b | |
IfThen :: Obs Bool -> Obs a -> Obs a -> Obs a |
Named observables
primVar :: VarName -> Obs Double Source #
A named external real-valued observable
Example:
primVar "gas-price"
var :: VarName -> Obs Double Source #
A named interal contract program variable.
Usually you should use letin
rather than this directly.
Time-based observables
at :: Time -> Obs Bool Source #
An observable that becomes true at a single given point in time and is false at all other times.
before :: Time -> Obs Bool Source #
An observable that is true up to a given point in time and is false thereafter.
after :: Time -> Obs Bool Source #
An observable that becomes true after a given point in time and is false prior to that time.
between :: Time -> Time -> Obs Bool Source #
An observable that is true between two given points in time and is false at all other times.
between t1 t2 = time >= t1 && time < t2
Operators
Comparison, logical and numeric operators
Other observable functions
ifthen :: Obs Bool -> Obs a -> Obs a -> Obs a Source #
if..then..else for observables (returns an observable)
Other utilities on observables
Parsing
parseObsCond :: XMLParser (Obs Bool) Source #
XML parser for condition observables
parseObsReal :: XMLParser (Obs Double) Source #
XML parser for real-valued observables
Evaluating
Analysing
isTrue :: Time -> Obs Bool -> Bool Source #
Check if an observable is known to be true at a given point in time, independent of knowledge of any external observables
isFalse :: Time -> Obs Bool -> Bool Source #
Check if an observable is known to be false at a given point in time, independent of knowledge of any external observables
nextTrue :: Time -> Obs Bool -> Maybe Time Source #
The next time that an observable is guaranteed to become true
nextFalse :: Time -> Obs Bool -> Maybe Time Source #
The next time that an observable is guaranteed to become false
timeHorizon :: Time -> Obs Bool -> Maybe Time Source #
The time horizon of an condition observable is earliest time that it
guaranteed to become true (or Nothing
if there is no such time)