shakebook-0.1.5.0: src/Shakebook/Rules.hs
module Shakebook.Rules where
import Control.Comonad.Cofree
import Control.Comonad.Store
import RIO
import Development.Shake
comonadStoreRuleGen :: ComonadStore s w
=> FilePattern -- The filepattern rule.
-> (FilePattern -> s) -- How to extract a position marker from the filepattern.
-> (FilePattern -> a) -- How to extract an id from the filepattern.
-> (a -> Action (w b)) -- How to turn the id into a searchable store.
-> (b -> FilePath -> Action ())
-> Rules ()
comonadStoreRuleGen fp f g h k = do
fp %> \x -> do
xs <- h (g x)
k (extract (seek (f x) xs)) x
cofreeRuleGen :: (Traversable w, ComonadCofree f w)
=> w FilePath
-> (FilePath -> FilePath)
-> (w FilePath -> FilePath -> Action ())
-> Rules ()
cofreeRuleGen xs h k = do
let f ys = h (extract ys) %> k ys
void . sequence . extend f $ xs