-- Hoogle documentation, generated by Haddock -- See Hoogle, http://www.haskell.org/hoogle/ -- | library for transparent execution of computations across shutdowns and restarts -- -- transparent low level support (state logging, resume of the -- computation state, wait for data condition) for very long time long -- living event driven processes. Workflow give the two first services to -- any monadic computation of type (a-> m a) f x >>=x'-> g x' -- >>= x''->... z by prefixing each action with the method -- step: step f x >>= x'-> step g x' >>= -- x''->... This means that a workflow can be described with the -- familiar do notation. In principle, there is no other -- limitation on the syntax but the restriction (a -> m a): All -- computations consume and produce the same type of data. for a monadic -- computation, Workflow provides: - transparent checkpointing for each -- step in permanent storage (using TCache) - sync or async -- syncronization of each action results with disk. - after soft or hard -- interruption, resume the monadic computation at the last checkpoint - -- retrieval of the returned value of any previous action - suspend the -- computation until the input object meet certain conditions. useful for -- inter-workflow comunications. For various reasons, this package force -- the use of TCache for storage and refSerialize for writing to/from -- strings at the end of the workflow all the intermediate data is -- erased. see demo.hs and the header of Control.TCache for -- documentation. this version uses Data.TCache.Dynamic @package Workflow @version 0.3 module Control.Workflow type Workflow m l = WF m (Stat l) l type WorkflowStep m a = a -> Workflow m a type WorkflowList m a = [(String, WorkflowStep m a)] data Stat a -- | step lift a monadic computation (a -> m a) in in to the WF monad, -- provides state loging and automatic resume step :: (Workflow_ a, Monad m) => (a -> m a) -> (a -> Workflow m a) -- | start or continue a workflow. WorkflowList is a assoclist of (name, -- workflow computation) startWF :: (Workflow_ a, Monad m) => String -> a -> WorkflowList m a -> m a restartWorkflows :: (Workflow_ a, IResource a, Serialize a) => WorkflowList IO a -> IO () getStep :: (Monad m) => Int -> Workflow m a getAll :: (Monad m) => WF m (Stat a) [a] waitFor :: (IResource a, Serialize a, Typeable a) => Filter a -> a -> IO a waitUntil :: Integer -> IO () syncWrite :: (Workflow_ a, Monad m, IResource a) => Bool -> Int -> Int -> WF m (Stat a) () instance [overlap ok] Typeable1 Stat instance [overlap ok] (IResource a, Serialize a, Typeable a) => Workflow_ a instance [overlap ok] (Monad m) => Monad (WF m s) instance [overlap ok] (IResource a, Serialize a, Typeable a) => IResource (Stat a) instance [overlap ok] (Serialize a) => Serialize (Stat a)