hsdev-0.2.1.0: Haskell development library

Safe HaskellNone
LanguageHaskell98

HsDev.Util

Contents

Synopsis

Documentation

withCurrentDirectory :: (MonadIO m, MonadMask m) => FilePath -> m a -> m a Source #

Run action with current directory set

directoryContents :: FilePath -> IO [FilePath] Source #

Get directory contents safely

traverseDirectory :: FilePath -> IO [FilePath] Source #

Collect all file names in directory recursively

searchPath :: (MonadIO m, MonadPlus m) => FilePath -> (FilePath -> m a) -> m a Source #

Search something up

isParent :: FilePath -> FilePath -> Bool Source #

Is one path parent of another

haskellSource :: FilePath -> Bool Source #

Is haskell source?

cabalFile :: FilePath -> Bool Source #

Is cabal file?

String utils

tab :: Int -> String -> String Source #

Add N tabs to line

tabs :: Int -> String -> String Source #

Add N tabs to multiline

trim :: String -> String Source #

Trim string

split :: (a -> Bool) -> [a] -> [[a]] Source #

Split list

Other utils

uniqueBy :: Ord b => (a -> b) -> [a] -> [a] Source #

mapBy :: Ord b => (a -> b) -> [a] -> Map b a Source #

Helper

(.::) :: FromJSON a => HashMap Text Value -> Text -> Parser a Source #

Workaround, sometimes we get HM.lookup "foo" v == Nothing, but lookup "foo" (HM.toList v) == Just smth

(.::?) :: FromJSON a => HashMap Text Value -> Text -> Parser (Maybe a) Source #

Returns Nothing when key doesn't exist or value is Null

(.::?!) :: FromJSON a => HashMap Text Value -> Text -> Parser [a] Source #

Same as .::? for list, returns empty list for non-existant key or Null value

objectUnion :: Value -> Value -> Value Source #

Union two JSON objects

jsonUnion :: (ToJSON a, ToJSON b) => a -> b -> Value Source #

Union two JSON objects

noNulls :: [Pair] -> [Pair] Source #

No Nulls in JSON object

Exceptions

liftException :: MonadCatch m => m a -> ExceptT String m a Source #

Lift IO exception to ExceptT

liftE :: MonadCatch m => m a -> ExceptT String m a Source #

Same as liftException

liftEIO :: (MonadCatch m, MonadIO m) => IO a -> ExceptT String m a Source #

liftE for IO

tries :: MonadPlus m => [m a] -> m [a] Source #

Run actions ignoring errors

triesMap :: MonadPlus m => (a -> m b) -> [a] -> m [b] Source #

liftExceptionM :: (MonadCatch m, MonadError String m) => m a -> m a Source #

Lift IO exception to MonadError

liftIOErrors :: MonadCatch m => ExceptT String m a -> ExceptT String m a Source #

Lift IO exceptions to ExceptT

liftThrow :: (Show e, MonadError e m, MonadCatch m) => m a -> m a Source #

Throw error as exception

UTF-8

readFileUtf8 :: FilePath -> IO String Source #

Read file in UTF8

IO

logException :: String -> (String -> IO ()) -> IO () -> IO () Source #

logIO :: MonadCatch m => String -> (String -> m ()) -> m () -> m () Source #

ignoreIO :: IO () -> IO () Source #

logAsync :: (MonadIO m, MonadCatch m) => (String -> m ()) -> m () -> m () Source #

Async

Command line

withHelp :: Parser a -> Parser a Source #

Add help command to parser

cmd :: String -> String -> Parser a -> Mod CommandFields a Source #

Subcommand

parseArgs :: String -> ParserInfo a -> [String] -> Either String a Source #

Parse arguments or return help

Version stuff

version :: Maybe [Int] Source #

Get hsdev version as list of integers

cutVersion :: Maybe [Int] -> Maybe [Int] Source #

Cut version to contain only significant numbers (currently 3)

sameVersion :: Maybe [Int] -> Maybe [Int] -> Bool Source #

Check if version is the same

strVersion :: Maybe [Int] -> String Source #

Version to string

Reexportss

class Monad m => MonadIO m where #

Monads in which IO computations may be embedded. Any monad built by applying a sequence of monad transformers to the IO monad will be an instance of this class.

Instances should satisfy the following laws, which state that liftIO is a transformer of monads:

Instances

MonadIO IO 

Methods

liftIO :: IO a -> IO a #

MonadIO Ghc 

Methods

liftIO :: IO a -> Ghc a #

MonadIO Hsc 

Methods

liftIO :: IO a -> Hsc a #

(Applicative m, MonadIO m) => MonadIO (GhcT m) 

Methods

liftIO :: IO a -> GhcT m a #

MonadIO m => MonadIO (MaybeT m) 

Methods

liftIO :: IO a -> MaybeT m a #

MonadIO m => MonadIO (ListT m) 

Methods

liftIO :: IO a -> ListT m a #

MonadIO m => MonadIO (LogT m) 

Methods

liftIO :: IO a -> LogT m a #

MonadIO m => MonadIO (ClientM m) # 

Methods

liftIO :: IO a -> ClientM m a #

MonadIO m => MonadIO (ServerM m) # 

Methods

liftIO :: IO a -> ServerM m a #

MonadIO m => MonadIO (UpdateM m) # 

Methods

liftIO :: IO a -> UpdateM m a #

MonadIO m => MonadIO (IdentityT * m) 

Methods

liftIO :: IO a -> IdentityT * m a #

(Functor f, MonadIO m) => MonadIO (FreeT f m) 

Methods

liftIO :: IO a -> FreeT f m a #

MonadIO m => MonadIO (ExceptT e m) 

Methods

liftIO :: IO a -> ExceptT e m a #

(Error e, MonadIO m) => MonadIO (ErrorT e m) 

Methods

liftIO :: IO a -> ErrorT e m a #

MonadIO m => MonadIO (StateT s m) 

Methods

liftIO :: IO a -> StateT s m a #

MonadIO m => MonadIO (StateT s m) 

Methods

liftIO :: IO a -> StateT s m a #

(Monoid w, MonadIO m) => MonadIO (WriterT w m) 

Methods

liftIO :: IO a -> WriterT w m a #

(Monoid w, MonadIO m) => MonadIO (WriterT w m) 

Methods

liftIO :: IO a -> WriterT w m a #

MonadIO m => MonadIO (MGhcT s m) # 

Methods

liftIO :: IO a -> MGhcT s m a #

MonadIO m => MonadIO (ContT * r m) 

Methods

liftIO :: IO a -> ContT * r m a #

MonadIO m => MonadIO (ReaderT * r m) 

Methods

liftIO :: IO a -> ReaderT * r m a #

(Monoid w, MonadIO m) => MonadIO (RWST r w s m) 

Methods

liftIO :: IO a -> RWST r w s m a #

(Monoid w, MonadIO m) => MonadIO (RWST r w s m) 

Methods

liftIO :: IO a -> RWST r w s m a #