withdependencies-0.2.3: 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

Functor (Require identifier content) Source 
Applicative (Require identifier content) Source 
Alternative (Require identifier content) Source 

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