-- 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)