Various helper routines.
- type Seconds = Int
- type EpochSeconds = Int64
- epochSeconds :: CalendarTime -> EpochSeconds
- eSecsToCalTime :: EpochSeconds -> IO CalendarTime
- epochPico :: CalendarTime -> Integer
- logMC :: Priority -> String -> IO ()
- hPutLine :: Handle -> String -> IO ()
- hGetLn :: Handle -> IO String
- unBracket, trim, rtrim, ltrim :: String -> String
- splitList :: Eq a => a -> [a] -> [[a]]
- splitListBy :: (a -> Bool) -> [a] -> [[a]]
- split :: (a -> Bool) -> [a] -> ([a], [a])
- mbReadFile :: a -> (String -> a) -> FilePath -> IO a
- mapFst :: (a -> b) -> [(a, x)] -> [(b, x)]
- mapSnd :: (a -> b) -> [(x, a)] -> [(x, b)]
- revmap :: a -> [a -> b] -> [b]
- comp :: Ord t => (a -> t) -> a -> a -> Ordering
- runCommand :: String -> [String] -> IO ()
- debug :: Show a => String -> a -> a
- debugM :: Monad m => String -> m ()
- readM :: (Monad m, Read t) => String -> m t
- maybeM :: Monad m => Maybe a -> m a
- boolM :: MonadPlus m => Bool -> m Bool
- notMb :: a -> Maybe a -> Maybe a
- periodic :: [Int] -> IO () -> IO ThreadId
- (.^) :: Int -> Int -> Int
- periodic' :: [Int] -> IO a -> IO a
Put a line into a handle followed by rn and echo to stdout
Drops the whitespace at the start of the string
Drops the whitespace at the end of the string
Trims the beginning and ending whitespace of a string
Repeadly splits a list by the provided separator and collects the results
Split is like break, but the matching element is dropped.
Read file with a default value if the file does not exist.
Run an external command. Upon failure print status to stderr.
Unsafe tracing, outputs the message and the value to stderr.
Convert Maybe into an another monad. This is a simple injection that calls fail when given a Nothing.
Lifts a bool into a MonadPlus, with False mapped to the mzero.
notMb a b returns
Just a if
Takes a list of delays, in seconds, and an action to execute repeatedly. The action is then executed repeatedly in a separate thread until the list has been consumed. The first action takes place immediately.