definition module uFPL.Sim from Data.Map import :: Map import iTasks import uFPL from uFPL.C import :: Signedness :: UFPLException = LiftException String | NoShareException ISharedRef | WriteToROShare ISharedRef instance toString UFPLException class lift a :: a -> Task Dynamic class unlift a b :: b -> a :: ReadOrWrite = ReadOnly | ReadWrite :: IShared = ISharedInt String Int ReadOrWrite | ISharedUInt String Int ReadOrWrite | ISharedLong String Int ReadOrWrite | ISharedULong String Int ReadOrWrite | ISharedBool String Bool ReadOrWrite :: ISharedRef :== String :: IShares :== [IShared] :: IExpr = ILitInt Int | ILitBool Bool | ILitChar Char | IShared ISharedRef | IAdd IExpr IExpr | ISub IExpr IExpr | IMul IExpr IExpr | IDiv IExpr IExpr | IEq IExpr IExpr | ILt IExpr IExpr | IAnd IExpr IExpr | IOr IExpr IExpr | IIf IExpr IExpr IExpr :: ITrigger = IChange ISharedRef | IBecomes ISharedRef IExpr | ITAnd ITrigger ITrigger | ITOr ITrigger ITrigger :: IRule = IAssign ISharedRef IExpr | IWhen IExpr [IRule] | ITrigger ITrigger [IRule] | ISetCursor (IExpr, IExpr) | IPrint IExpr :: INamedRule = Rule String [IRule] :: IState = { isvalues :: Map String Int , uisvalues :: Map String Int , lsvalues :: Map String Int , ulsvalues :: Map String Int , bsvalues :: Map String Bool } derive class iTask Signedness, CType, ReadOrWrite, IShared, IExpr, ITrigger, IRule, INamedRule, IState instance lift [a] | lift a instance unlift [a] [b] | unlift a b instance lift IExpr instance unlift IExpr (Expr t rw) | Expr t instance lift ITrigger instance unlift ITrigger Trigger instance lift IRule instance unlift IRule Rule instance lift INamedRule instance unlift INamedRule NamedRule simulate :: [NamedRule] -> Task ()