hledger-lib-0.24: Core data types, parsers and utilities for the hledger accounting tool.

Safe HaskellNone
LanguageHaskell2010

Hledger.Utils

Description

Standard imports and utilities which are useful everywhere, or needed low in the module hierarchy. This is the bottom of hledger's module graph.

Synopsis

Documentation

strip :: [Char] -> String Source

Remove leading and trailing whitespace.

lstrip :: String -> String Source

Remove leading whitespace.

rstrip :: [Char] -> [Char] Source

Remove trailing whitespace.

chomp :: [Char] -> [Char] Source

Remove trailing newlines/carriage returns.

quoteIfSpaced :: String -> String Source

Wrap a string in double quotes, and -prefix any embedded single quotes, if it contains whitespace and is not already single- or double-quoted.

quoteIfNeeded :: [Char] -> [Char] Source

Double-quote this string if it contains whitespace, single quotes or double-quotes, escaping the quotes as needed.

singleQuoteIfNeeded :: [Char] -> [Char] Source

Single-quote this string if it contains whitespace or double-quotes. No good for strings containing single quotes.

words' :: String -> [String] Source

Quote-aware version of words - don't split on spaces which are inside quotes. NB correctly handles "a'b" but not "''a''". Can raise an error if parsing fails.

unwords' :: [String] -> String Source

Quote-aware version of unwords - single-quote strings which contain whitespace

stripquotes :: String -> String Source

Strip one matching pair of single or double quotes on the ends of a string.

concatTopPadded :: [String] -> String Source

Join multi-line strings as side-by-side rectangular strings of the same height, top-padded.

concatBottomPadded :: [String] -> String Source

Join multi-line strings as side-by-side rectangular strings of the same height, bottom-padded.

vConcatRightAligned :: [String] -> String Source

Compose strings vertically and right-aligned.

padtop :: Int -> String -> String Source

Convert a multi-line string to a rectangular string top-padded to the specified height.

padbottom :: Int -> String -> String Source

Convert a multi-line string to a rectangular string bottom-padded to the specified height.

padleft :: Int -> String -> String Source

Convert a multi-line string to a rectangular string left-padded to the specified width.

padright :: Int -> String -> String Source

Convert a multi-line string to a rectangular string right-padded to the specified width.

cliptopleft :: Int -> Int -> String -> String Source

Clip a multi-line string to the specified width and height from the top left.

fitto :: Int -> Int -> String -> String Source

Clip and pad a multi-line string to fill the specified width and height.

first3 :: (t, t1, t2) -> t Source

second3 :: (t, t1, t2) -> t1 Source

third3 :: (t, t1, t2) -> t2 Source

first4 :: (t, t1, t2, t3) -> t Source

second4 :: (t, t1, t2, t3) -> t1 Source

third4 :: (t, t1, t2, t3) -> t2 Source

fourth4 :: (t, t1, t2, t3) -> t3 Source

first5 :: (t, t1, t2, t3, t4) -> t Source

second5 :: (t, t1, t2, t3, t4) -> t1 Source

third5 :: (t, t1, t2, t3, t4) -> t2 Source

fourth5 :: (t, t1, t2, t3, t4) -> t3 Source

fifth5 :: (t, t1, t2, t3, t4) -> t4 Source

difforzero :: (Num a, Ord a) => a -> a -> a Source

splitAtElement :: Eq a => a -> [a] -> [[a]] Source

root :: Tree a -> a Source

leaves :: Tree a -> [a] Source

List just the leaf nodes of a tree

subtreeat :: Eq a => a -> Tree a -> Maybe (Tree a) Source

get the sub-tree rooted at the first (left-most, depth-first) occurrence of the specified node value

subtreeinforest :: Eq a => a -> [Tree a] -> Maybe (Tree a) Source

get the sub-tree for the specified node value in the first tree in forest in which it occurs.

treeprune :: Int -> Tree a -> Tree a Source

remove all nodes past a certain depth

treemap :: (a -> b) -> Tree a -> Tree b Source

apply f to all tree nodes

treefilter :: (a -> Bool) -> Tree a -> Tree a Source

remove all subtrees whose nodes do not fulfill predicate

treeany :: (a -> Bool) -> Tree a -> Bool Source

is predicate true in any node of tree ?

showtree :: Show a => Tree a -> String Source

show a compact ascii representation of a tree

showforest :: Show a => Forest a -> String Source

show a compact ascii representation of a forest

newtype FastTree a Source

An efficient-to-build tree suggested by Cale Gibbard, probably better than accountNameTreeFrom.

Constructors

T (Map a (FastTree a)) 

Instances

Eq a => Eq (FastTree a) 
Ord a => Ord (FastTree a) 
Show a => Show (FastTree a) 

treeFromPaths :: Ord a => [[a]] -> FastTree a Source

choice' :: Stream s m t => [ParsecT s u m a] -> ParsecT s u m a Source

Backtracking choice, use this when alternatives share a prefix. Consumes no input if all choices fail.

parseWithCtx :: Stream s m t => u -> ParsecT s u m a -> s -> m (Either ParseError a) Source

eolof :: Stream [Char] m Char => ParsecT [Char] st m () Source

testName :: Test -> String Source

Get a Test's label, or the empty string.

flattenTests :: Test -> [Test] Source

Flatten a Test containing TestLists into a list of single tests.

filterTests :: (Test -> Bool) -> Test -> Test Source

Filter TestLists in a Test, recursively, preserving the structure.

is :: (Eq a, Show a) => a -> a -> Assertion Source

Simple way to assert something is some expected value, with no label.

assertParse :: Either ParseError a -> Assertion Source

Assert a parse result is successful, printing the parse error on failure.

assertParseFailure :: Either ParseError a -> Assertion Source

Assert a parse result is successful, printing the parse error on failure.

assertParseEqual :: (Show a, Eq a) => Either ParseError a -> a -> Assertion Source

Assert a parse result is some expected value, printing the parse error on failure.

printParseError :: Show a => a -> IO () Source

applyN :: Int -> (a -> a) -> a -> a Source

Apply a function the specified number of times. Possibly uses O(n) stack ?

expandPath :: MonadIO m => FilePath -> FilePath -> m FilePath Source

Convert a possibly relative, possibly tilde-containing file path to an absolute one, given the current directory. ~username is not supported. Leave "-" unchanged.

firstJust :: Eq a => [Maybe a] -> Maybe a Source

readFile' :: FilePath -> IO String Source

Read a file in universal newline mode, handling whatever newline convention it may contain.

type SystemString = String Source

A string received from or being passed to the operating system, such as a file path, command-line argument, or environment variable name or value. With GHC versions before 7.2 on some platforms (posix) these are typically encoded. When converting, we assume the encoding is UTF-8 (cf http://www.dwheeler.com/essays/fixing-unix-linux-filenames.html#UTF8).

fromSystemString :: SystemString -> String Source

Convert a system string to an ordinary string, decoding from UTF-8 if it appears to be UTF8-encoded and GHC version is less than 7.2.

toSystemString :: String -> SystemString Source

Convert a unicode string to a system string, encoding with UTF-8 if we are on a posix platform with GHC < 7.2.

error' :: String -> a Source

A SystemString-aware version of error.

userError' :: String -> IOError Source

A SystemString-aware version of userError.