Portability  rank2, GADTs 

Stability  provisional 
Maintainer  Edward Kmett <ekmett@gmail.com> 
Safe Haskell  SafeInferred 
 newtype MachineT m k o = MachineT {
 runMachineT :: m (Step k o (MachineT m k o))
 data Step k o r
 type Machine k o = forall m. Monad m => MachineT m k o
 runT_ :: Monad m => MachineT m k b > m ()
 runT :: Monad m => MachineT m k b > m [b]
 run :: MachineT Identity k b > [b]
 runMachine :: MachineT Identity k o > Step k o (MachineT Identity k o)
 encased :: Monad m => Step k o (MachineT m k o) > MachineT m k o
 construct :: Monad m => PlanT k o m a > MachineT m k o
 repeatedly :: Monad m => PlanT k o m a > MachineT m k o
 before :: Monad m => MachineT m k o > PlanT k o m a > MachineT m k o
 fit :: Monad m => (forall a. k a > k' a) > MachineT m k o > MachineT m k' o
 fitM :: (Monad m, Monad m') => (forall a. m a > m' a) > MachineT m k o > MachineT m' k o
 pass :: k o > Machine k o
 stopped :: Machine k b
 class Appliance k where
Machines
A MachineT
reads from a number of inputs and may yield results before stopping
with monadic sideeffects.
MachineT  

runT_ :: Monad m => MachineT m k b > m ()Source
Stop feeding input into model, taking only the effects.
Building machines from plans
repeatedly :: Monad m => PlanT k o m a > MachineT m k oSource
Generates a model that runs a machine until it stops, then start it up again.
repeatedly
m =construct
(forever
m)
before :: Monad m => MachineT m k o > PlanT k o m a > MachineT m k oSource
Evaluate a machine until it stops, and then yield answers according to the supplied model.