packages feed

incremental-computing-0.0.1.0: src/tools/Utilities.hs

module Utilities (

    recompute,
    adapt

) where

-- Data

import Data.Incremental

recompute :: (Changeable a, Changeable b)
          => (a -> b)
          -> (a, [DefaultChange a]) -> [b]
recompute fun src = map fun (applyChanges src)

adapt :: (Changeable a, Changeable b)
      => (a ->> b)
      -> (a, [DefaultChange a]) -> [b]
adapt trans src = applyChanges (runTrans trans src)

applyChanges :: Change p => (Value p, [p]) -> [Value p]
applyChanges (val, changes) = scanl (flip ($$)) val changes