definition module Snug.Compile.Simulate from Control.Applicative import class Applicative, class pure, class <*> from Control.Monad import class Monad from Control.Monad.Identity import :: Identity, instance Functor Identity, instance Monad Identity, instance pure Identity, instance <*> Identity from Control.Monad.State import :: State, :: StateT, instance Functor (StateT s m), instance Monad (StateT s m), instance pure (StateT s m), instance <*> (StateT s m) from Data.Functor import class Functor from MIPS.MIPS32 import :: Instruction, :: Label from Snug.Syntax import :: BasicValue :: Simulator a :== State SimulationState a :: SimulationState simulate :: !(Simulator a) -> [Instruction] buildCons :: !Label !Int -> Simulator () buildThunk :: !Label !Int -> Simulator () pushBasicValue :: !BasicValue -> Simulator () indirectAndEval :: Simulator ()