halfs-2.0: Halfs/Utils.hs
module Halfs.Utils where
import qualified Data.Map as M
import Halfs.Classes
import Halfs.Monad
import Halfs.Types
fmapFst :: (a -> b) -> (a, c) -> (b, c)
fmapFst f (x,y) = (f x, y)
fmapSnd :: (b -> c) -> (a, b) -> (a, c)
fmapSnd f (x,y) = (x, f y)
maybe' :: Maybe a -> b -> (a -> b) -> b
maybe' ma = \x y -> maybe x y ma
whenJustM :: Monad m => Maybe a -> (a -> m ()) -> m ()
whenJustM ma f = maybe (return ()) f ma
divCeil :: Integral a => a -> a -> a
divCeil a b = (a + (b - 1)) `div` b
unfoldrM :: Monad m => (b -> m (Maybe (a, b))) -> b -> m [a]
unfoldrM f x = do
r <- f x
case r of
Nothing -> return []
Just (a,b) -> liftM (a:) $ unfoldrM f b
unfoldrM_ :: Monad m => (b -> m (Maybe (a, b))) -> b -> m ()
unfoldrM_ f x = unfoldrM f x >> return ()
lookupM :: (Ord k, Monad m) => k -> m (M.Map k v) -> m (Maybe v)
lookupM = liftM . M.lookup
lookupRM :: (Ord k, Reffable r m) => k -> r (M.Map k v) -> m (Maybe v)
lookupRM k = lookupM k . readRef
deleteRM :: (Ord k, Reffable r m) => k -> r (M.Map k v) -> m ()
deleteRM k mapRef = modifyRef mapRef $ M.delete k
insertRM :: (Ord k, Reffable r m) => k -> v -> r (M.Map k v) -> m()
insertRM k v mapRef = modifyRef mapRef $ M.insert k v
lookupDE :: Reffable r m =>
FilePath -> DirHandle r l -> m (Maybe DirectoryEntry)
lookupDE nm = lookupRM nm . dhContents
withDHLock :: (HalfsCapable b t r l m) =>
DirHandle r1 l -> HalfsT err env m a -> HalfsT err env m a
withDHLock = withLock . dhLock