-- Hoogle documentation, generated by Haddock -- See Hoogle, http://www.haskell.org/hoogle/ -- | Run computations that depend on one or more elements in a stream. -- -- Run computations that depend on one or more elements in a stream. @package withdependencies @version 0.2.3 -- | This module is a glorified wrapper over lookup. It let you -- define computations in an applicative way that "require" some optional -- values, defined by an identifier. -- -- Once defined, it is possible to extract the list of identifiers, and -- also to evaluate the computation. -- --
--   let computation = ( (+) <$> require "a" <*> require "b" )
--   > computeRequire M.empty computation :: Maybe Int
--   Nothing
--   > computeRequire (M.fromList [("a", 12), ("b", 15)]) computation :: Maybe Int
--   Just 27
--   > computeRequire (M.fromList [("a", 12), ("c", 15)]) computation :: Maybe Int
--   Nothing
--   
module Control.Dependency -- | The main data type, used to model a computation that requires a list -- of named parameters (the "identifier"), that are linked to a -- "content", and that will yield a result of type "a". data Require identifier content a -- | This operator let you "require" a value in a computation. require :: Eq identifier => identifier -> Require identifier content content requireFilter :: (identifier -> Bool) -> Require identifier content (identifier, content) -- | Evaluate a computation, given a map of key/values for possible -- parameters. computeRequire :: (Ord identifier, Eq identifier, Applicative f, Alternative f) => [(identifier, content)] -> Require identifier content a -> f a -- | Checks if a computation can be completed given a set of known -- identifiers. isComputable :: (Ord identifier, Eq identifier) => Set identifier -> Require identifier content a -> Bool triggersAnalyzer :: identifier -> Require identifier content a -> Bool instance GHC.Base.Functor (Control.Dependency.Require identifier content) instance GHC.Base.Applicative (Control.Dependency.Require identifier content) instance GHC.Base.Alternative (Control.Dependency.Require identifier content) -- | Runs computations depending on some values coming from a conduit. The -- computations are defined in applicative fashion. -- --
--   test :: IO [Int]
--   test = inp =$ cnd $$ CL.consume
--       where
--           inp = sourceDirectory "/etc"
--           cnd :: Conduit String IO Int
--           cnd = withRequirement (map Once comps) id (fmap length . readFile)
--           comps :: [Require String Int Int]
--           comps = [ (+) <$> require "/etc/passwd" <*> require "/etc/passwd"
--                   , (-) <$> require "/etc/resolv.conf" <*> require "/etc/nonexistent"
--                   , require "/etc/hosts"
--                   ]
--   
module Data.Conduit.Require -- | Given a stream of values, from which an identifier and a content can -- be extracted, runs a list of computation that depend on these. -- -- Each computation's output is yielded downstream. -- -- When all computations have been run, the conduit finishes processing. withRequirement :: (Ord identifier, Eq identifier, Monad m, Functor m) => [(RunMode, Require identifier content x)] -> (a -> identifier) -> (a -> m content) -> Conduit a m x -- | This allows the user to parameter what happends once a requirement is -- fulfilled. data RunMode -- | The requirement will be reset, and can be run multiple times Reset :: RunMode -- | The requirement can only run once Once :: RunMode instance GHC.Show.Show Data.Conduit.Require.RunMode