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