withdependencies-0.2.4.1: Run computations that depend on one or more elements in a stream.

Safe HaskellSafe
LanguageHaskell2010

Control.Dependency

Description

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

Synopsis

Documentation

data Require identifier content a Source #

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

Instances

Profunctor (Require identifier) Source # 

Methods

dimap :: (a -> b) -> (c -> d) -> Require identifier b c -> Require identifier a d #

lmap :: (a -> b) -> Require identifier b c -> Require identifier a c #

rmap :: (b -> c) -> Require identifier a b -> Require identifier a c #

(#.) :: Coercible * c b => (b -> c) -> Require identifier a b -> Require identifier a c #

(.#) :: Coercible * b a => Require identifier b c -> (a -> b) -> Require identifier a c #

Functor (Require identifier content) Source # 

Methods

fmap :: (a -> b) -> Require identifier content a -> Require identifier content b #

(<$) :: a -> Require identifier content b -> Require identifier content a #

Applicative (Require identifier content) Source # 

Methods

pure :: a -> Require identifier content a #

(<*>) :: Require identifier content (a -> b) -> Require identifier content a -> Require identifier content b #

(*>) :: Require identifier content a -> Require identifier content b -> Require identifier content b #

(<*) :: Require identifier content a -> Require identifier content b -> Require identifier content a #

Alternative (Require identifier content) Source # 

Methods

empty :: Require identifier content a #

(<|>) :: Require identifier content a -> Require identifier content a -> Require identifier content a #

some :: Require identifier content a -> Require identifier content [a] #

many :: Require identifier content a -> Require identifier content [a] #

require :: Eq identifier => identifier -> Require identifier content content Source #

This operator let you "require" a value in a computation.

requireFilter :: (identifier -> Bool) -> Require identifier content (identifier, content) Source #

computeRequire :: (Ord identifier, Eq identifier, Applicative f, Alternative f) => [(identifier, content)] -> Require identifier content a -> f a Source #

Evaluate a computation, given a map of key/values for possible parameters.

isComputable :: (Ord identifier, Eq identifier) => Set identifier -> Require identifier content a -> Bool Source #

Checks if a computation can be completed given a set of known identifiers.

triggersAnalyzer :: identifier -> Require identifier content a -> Bool Source #