Safe Haskell | None |
---|---|
Language | Haskell2010 |
Methods for traversing programs
- class DryInterp instr where
- dryInterp :: MonadSupply m => instr m a -> m a
- observe_ :: (DryInterp instr, HFunctor instr, MonadSupply m) => (forall a. instr m a -> a -> m ()) -> Program instr a -> m a
- observe :: (DryInterp instr, HFunctor instr, MonadSupply m) => (forall a. instr m a -> a -> m a) -> Program instr a -> m a
Documentation
class DryInterp instr where Source
Dry (effect-less) interpretation of an instruction. This class is like
Interp
without the monad parameter, so it cannot have different instances
for different monads.
dryInterp :: MonadSupply m => instr m a -> m a Source
Dry interpretation of an instruction. This function is like interp
except that it interprets in any monad that can supply fresh variables.
CompExp exp => DryInterp (CallCMD exp) Source | |
DryInterp (ObjectCMD exp) Source | |
CompExp exp => DryInterp (FileCMD exp) Source | |
DryInterp (ControlCMD exp) Source | |
CompExp exp => DryInterp (ArrCMD exp) Source | |
CompExp exp => DryInterp (RefCMD exp) Source | |
(DryInterp i1, DryInterp i2) => DryInterp ((:+:) (* -> *) * i1 i2) Source |
:: (DryInterp instr, HFunctor instr, MonadSupply m) | |
=> (forall a. instr m a -> a -> m ()) | Function for observing instructions |
-> Program instr a | |
-> m a |
Interpretation of a program as a combination of dry interpretation and effectful observation