imperative-edsl-0.4.1: Deep embedding of imperative programs with code generation

Safe HaskellNone
LanguageHaskell2010

Language.Embedded.Traversal

Description

Methods for traversing programs

Synopsis

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.

Methods

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.

Instances

observe_ Source

Arguments

:: (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

observe Source

Arguments

:: (DryInterp instr, HFunctor instr, MonadSupply m) 
=> (forall a. instr m a -> a -> m a)

Function for observing instructions

-> Program instr a 
-> m a 

Interpretation of a program as a combination of dry interpretation and effectful observation