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 :: ISharedInt = { iisname :: String , iisinit :: Int , iisrw :: ReadOrWrite } :: ISharedUInt = { iuisname :: String , iuisinit :: Int , iuisrw :: ReadOrWrite } :: ISharedLong = { ilsname :: String , ilsinit :: Int , ilsrw :: ReadOrWrite } :: ISharedULong = { iulsname :: String , iulsinit :: Int , iulsrw :: ReadOrWrite } :: ISharedBool = { ibsname :: String , ibsinit :: Bool , ibsrw :: ReadOrWrite } :: ISharedRef :== String :: IShares = { ishares :: [ISharedInt] , uishares :: [ISharedUInt] , lshares :: [ISharedLong] , ulshares :: [ISharedULong] , bshares :: [ISharedBool] } :: 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, ISharedInt, ISharedUInt, ISharedLong, ISharedULong, ISharedBool, IShares, 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 ISharedInt instance unlift ISharedInt (UShared Int rw) instance lift ITrigger instance unlift ITrigger Trigger instance lift IRule instance unlift IRule Rule instance lift INamedRule instance unlift INamedRule NamedRule simulate :: [NamedRule] -> Task ()