hsdev-0.3.1.3: 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: no fail, ignoring symbolic links, also prepends paths with dir name

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

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

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

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

No Nulls in JSON object

fromJSON' :: FromJSON a => Value -> Maybe a Source #

Try convert json to value

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

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

logAll :: (MonadLog m, MonadCatch m) => m () -> m () Source #

Log exceptions and ignore

UTF-8

readFileUtf8 :: FilePath -> IO Text Source #

Read file in UTF8

IO

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

ignoreIO :: MonadCatch m => m () -> m () Source #

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

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

Parse

parseDT :: (Monad m, Text a) => String -> String -> m a Source #

Parse Distribution.Text

Log utils

timer :: MonadLog m => Text -> m a -> m a Source #

Measure time of action

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:

Minimal complete definition

liftIO

Methods

liftIO :: IO a -> m a #

Lift a computation from the IO monad.

Instances

MonadIO IO

Since: 4.9.0.0

Methods

liftIO :: IO a -> IO a #

MonadIO Ghc 

Methods

liftIO :: IO a -> Ghc a #

MonadIO Hsc 

Methods

liftIO :: IO a -> Hsc a #

MonadIO m => MonadIO (MaybeT m) 

Methods

liftIO :: IO a -> MaybeT m a #

MonadIO m => MonadIO (ResourceT m) 

Methods

liftIO :: IO a -> ResourceT m a #

MonadIO m => MonadIO (GhcT m) 

Methods

liftIO :: IO a -> GhcT 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 #

(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 (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 #

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 (ReaderT * r m) 

Methods

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

MonadIO m => MonadIO (ConduitT i o m) 

Methods

liftIO :: IO a -> ConduitT i o m a #

MonadIO m => MonadIO (ContT * r m) 

Methods

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

MonadIO m => MonadIO (MGhcT s d m) # 

Methods

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

MonadIO m => MonadIO (InspectM k t m) # 

Methods

liftIO :: IO a -> InspectM k t 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 #

MonadIO m => MonadIO (Pipe l i o u m) 

Methods

liftIO :: IO a -> Pipe l i o u m a #