makedo-0.1: Makedo/Contained.hs
module Makedo.Contained where
import Makedo.Target
import System.FilePath
-- | redo 0.06 and under do not like it if you try to redo something that's
-- in a directory that does not yet exist, so unfortunately, we need some way
-- to create the parent directories before invoking the targets
data Contained = Contained
{ containers :: [FilePath]
, targets :: [ExactTarget]
, allTargets :: [Target] -- ^ should be superset of targets
}
-- | Just one of the possible 'a' used to generate a path component
-- which will then just be chopped off again with takeDirectory
class Containable a where
czero :: a
mkContained :: Containable b
=> [b -> ExactTarget]
-> [b] -- ^ possibilities
-> Contained
mkContained fs xs =
Contained { containers = map (\f -> takeDirectory . ePath $ f czero) fs
, targets = ts
, allTargets = map target ts
}
where
ts = [ f x | f <- fs, x <- xs ]