module Development.Shake.Plus.Loaders (
batchLoad
, batchLoadWithin
, batchLoadWithin'
) where
import Development.Shake.Plus.Core
import Development.Shake.Plus.Directory
import Path
import RIO
import qualified RIO.HashMap as HM
import Within
traverseToSnd :: Functor f => (a -> f b) -> a -> f (a, b)
traverseToSnd f a = (a,) <$> f a
batchLoad :: MonadAction m
=> Path b Dir
-> [FilePattern]
-> (Path b File -> m a)
-> m (HashMap (Path Rel File) a)
batchLoad dir pat f = do
xs <- getDirectoryFiles dir pat >>= mapM (traverseToSnd $ f . fromWithin . (`within` dir))
return . HM.fromList $ xs
batchLoadWithin :: MonadAction m
=> Path b Dir
-> [FilePattern]
-> (Path b File -> m a)
-> m (Within b (HashMap (Path Rel File) a))
batchLoadWithin dir pat f = do
xs <- getDirectoryFiles dir pat >>= mapM (traverseToSnd $ f . fromWithin . (`within` dir))
return $ (`within` dir) $ HM.fromList xs
batchLoadWithin' :: MonadAction m
=> Path b Dir
-> [FilePattern]
-> (Path b File -> m a)
-> m (HashMap (Within b (Path Rel File)) a)
batchLoadWithin' dir pat f = do
xs <- getDirectoryFiles dir pat >>= mapM (traverseToSnd $ f . fromWithin . (`within` dir))
return $ HM.fromList (first (`within` dir) <$> xs)