kit-0.6: Kit/Util.hs
{-# LANGUAGE TypeSynonymInstances #-}
module Kit.Util(
module Kit.Util,
module Control.Applicative,
module System.FilePath.Posix,
module System.Directory,
module Control.Monad
) where
import System.Directory
import System.FilePath.Posix
import System.FilePath.Glob
import Data.List
import Data.Maybe
import Data.Monoid
import Control.Applicative
import Control.Monad
import Control.Monad.Error
import qualified Control.Monad.State as S
popS :: S.State [a] a
popS = do
(x:t) <- S.get
S.put t
return x
puts :: MonadIO m => String -> m ()
puts a = liftIO $ putStrLn a
maybeRead :: Read a => String -> Maybe a
maybeRead = fmap fst . listToMaybe . reads
justTrue :: Bool -> a -> Maybe a
justTrue p a = if p then Just a else Nothing
maybeToRight :: b -> Maybe a -> Either b a
maybeToRight v = maybe (Left v) Right
maybeToLeft :: b -> Maybe a -> Either a b
maybeToLeft v = maybe (Right v) Left
type KitIO a = ErrorT String IO a
maybeToKitIO :: String -> Maybe a -> KitIO a
maybeToKitIO msg = maybe (throwError msg) return
mkdir_p :: MonadIO m => FilePath -> m ()
mkdir_p = liftIO . createDirectoryIfMissing True
cleanOrCreate :: MonadIO m => FilePath -> m ()
cleanOrCreate directory = liftIO $ do
exists <- doesDirectoryExist directory
when exists $ removeDirectoryRecursive directory
mkdir_p directory
inDirectory :: MonadIO m => FilePath -> m a -> m a
inDirectory dir actions = do
cwd <- liftIO getCurrentDirectory
liftIO $ setCurrentDirectory dir
v <- actions
liftIO $ setCurrentDirectory cwd
return v
glob :: String -> IO [String]
glob pattern = globDir1 (compile pattern) ""
stringJoin :: Monoid a => a -> [a] -> a
stringJoin x = mconcat . intersperse x