lib: Replace some utility functions with library functions.
This commit is contained in:
parent
0ddb5fa4e3
commit
702c958487
@ -84,6 +84,7 @@ import Control.Applicative.Permutations
|
|||||||
import Control.Monad (guard, unless)
|
import Control.Monad (guard, unless)
|
||||||
import "base-compat-batteries" Data.List.Compat
|
import "base-compat-batteries" Data.List.Compat
|
||||||
import Data.Default
|
import Data.Default
|
||||||
|
import Data.Foldable (asum)
|
||||||
import Data.Maybe
|
import Data.Maybe
|
||||||
import qualified Data.Set as Set
|
import qualified Data.Set as Set
|
||||||
import Data.Text (Text)
|
import Data.Text (Text)
|
||||||
@ -654,7 +655,7 @@ advancetonthweekday n wd s =
|
|||||||
|
|
||||||
-- -- | Parse a couple of date-time string formats to a time type.
|
-- -- | Parse a couple of date-time string formats to a time type.
|
||||||
-- parsedatetimeM :: String -> Maybe LocalTime
|
-- parsedatetimeM :: String -> Maybe LocalTime
|
||||||
-- parsedatetimeM s = firstJust [
|
-- parsedatetimeM s = asum [
|
||||||
-- parseTime defaultTimeLocale "%Y/%m/%d %H:%M:%S" s,
|
-- parseTime defaultTimeLocale "%Y/%m/%d %H:%M:%S" s,
|
||||||
-- parseTime defaultTimeLocale "%Y-%m-%d %H:%M:%S" s
|
-- parseTime defaultTimeLocale "%Y-%m-%d %H:%M:%S" s
|
||||||
-- ]
|
-- ]
|
||||||
@ -672,9 +673,9 @@ parsetime =
|
|||||||
-- `YYYY-MM-DD`, `YYYY/MM/DD` or `YYYY.MM.DD`, with leading zeros required.
|
-- `YYYY-MM-DD`, `YYYY/MM/DD` or `YYYY.MM.DD`, with leading zeros required.
|
||||||
-- For internal use, not quite the same as the journal's "simple dates".
|
-- For internal use, not quite the same as the journal's "simple dates".
|
||||||
parsedateM :: String -> Maybe Day
|
parsedateM :: String -> Maybe Day
|
||||||
parsedateM s = firstJust [
|
parsedateM s = asum [
|
||||||
parsetime defaultTimeLocale "%Y/%m/%d" s,
|
|
||||||
parsetime defaultTimeLocale "%Y-%m-%d" s,
|
parsetime defaultTimeLocale "%Y-%m-%d" s,
|
||||||
|
parsetime defaultTimeLocale "%Y/%m/%d" s,
|
||||||
parsetime defaultTimeLocale "%Y.%m.%d" s
|
parsetime defaultTimeLocale "%Y.%m.%d" s
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|||||||
@ -49,6 +49,7 @@ import qualified Control.Exception as C
|
|||||||
import Control.Monad (when)
|
import Control.Monad (when)
|
||||||
import "mtl" Control.Monad.Except (runExceptT)
|
import "mtl" Control.Monad.Except (runExceptT)
|
||||||
import Data.Default
|
import Data.Default
|
||||||
|
import Data.Foldable (asum)
|
||||||
import Data.List
|
import Data.List
|
||||||
import Data.Maybe
|
import Data.Maybe
|
||||||
import Data.Ord
|
import Data.Ord
|
||||||
@ -170,7 +171,7 @@ readJournalFile :: InputOpts -> PrefixedFilePath -> IO (Either String Journal)
|
|||||||
readJournalFile iopts prefixedfile = do
|
readJournalFile iopts prefixedfile = do
|
||||||
let
|
let
|
||||||
(mfmt, f) = splitReaderPrefix prefixedfile
|
(mfmt, f) = splitReaderPrefix prefixedfile
|
||||||
iopts' = iopts{mformat_=firstJust [mfmt, mformat_ iopts]}
|
iopts' = iopts{mformat_=asum [mfmt, mformat_ iopts]}
|
||||||
requireJournalFileExists f
|
requireJournalFileExists f
|
||||||
t <- readFileOrStdinPortably f
|
t <- readFileOrStdinPortably f
|
||||||
-- <- T.readFile f -- or without line ending translation, for testing
|
-- <- T.readFile f -- or without line ending translation, for testing
|
||||||
|
|||||||
@ -1152,7 +1152,7 @@ csvFieldValue rules record fieldname = do
|
|||||||
-- the "simple date" formats (YYYY/MM/DD, YYYY-MM-DD, YYYY.MM.DD, leading
|
-- the "simple date" formats (YYYY/MM/DD, YYYY-MM-DD, YYYY.MM.DD, leading
|
||||||
-- zeroes optional).
|
-- zeroes optional).
|
||||||
parseDateWithCustomOrDefaultFormats :: Maybe DateFormat -> String -> Maybe Day
|
parseDateWithCustomOrDefaultFormats :: Maybe DateFormat -> String -> Maybe Day
|
||||||
parseDateWithCustomOrDefaultFormats mformat s = firstJust $ map parsewith formats
|
parseDateWithCustomOrDefaultFormats mformat s = asum $ map parsewith formats
|
||||||
where
|
where
|
||||||
parsetime =
|
parsetime =
|
||||||
#if MIN_VERSION_time(1,5,0)
|
#if MIN_VERSION_time(1,5,0)
|
||||||
|
|||||||
@ -82,6 +82,7 @@ import Control.Monad.IO.Class (MonadIO, liftIO)
|
|||||||
import Control.Monad.Except (ExceptT(..), runExceptT)
|
import Control.Monad.Except (ExceptT(..), runExceptT)
|
||||||
import Control.Monad.State.Strict (get,modify',put)
|
import Control.Monad.State.Strict (get,modify',put)
|
||||||
import Control.Monad.Trans.Class (lift)
|
import Control.Monad.Trans.Class (lift)
|
||||||
|
import Data.Either (isRight)
|
||||||
import qualified Data.Map.Strict as M
|
import qualified Data.Map.Strict as M
|
||||||
#if !(MIN_VERSION_base(4,11,0))
|
#if !(MIN_VERSION_base(4,11,0))
|
||||||
import Data.Monoid ((<>))
|
import Data.Monoid ((<>))
|
||||||
|
|||||||
@ -146,13 +146,6 @@ getCurrentZonedTime = do
|
|||||||
|
|
||||||
instance Default Bool where def = False
|
instance Default Bool where def = False
|
||||||
|
|
||||||
isLeft :: Either a b -> Bool
|
|
||||||
isLeft (Left _) = True
|
|
||||||
isLeft _ = False
|
|
||||||
|
|
||||||
isRight :: Either a b -> Bool
|
|
||||||
isRight = not . isLeft
|
|
||||||
|
|
||||||
-- | Apply a function the specified number of times,
|
-- | Apply a function the specified number of times,
|
||||||
-- which should be > 0 (otherwise does nothing).
|
-- which should be > 0 (otherwise does nothing).
|
||||||
-- Possibly uses O(n) stack ?
|
-- Possibly uses O(n) stack ?
|
||||||
@ -178,10 +171,6 @@ expandHomePath = \case
|
|||||||
('~':_) -> ioError $ userError "~USERNAME in paths is not supported"
|
('~':_) -> ioError $ userError "~USERNAME in paths is not supported"
|
||||||
p -> return p
|
p -> return p
|
||||||
|
|
||||||
firstJust ms = case dropWhile (==Nothing) ms of
|
|
||||||
[] -> Nothing
|
|
||||||
(md:_) -> md
|
|
||||||
|
|
||||||
-- | Read text from a file,
|
-- | Read text from a file,
|
||||||
-- converting any \r\n line endings to \n,,
|
-- converting any \r\n line endings to \n,,
|
||||||
-- using the system locale's text encoding,
|
-- using the system locale's text encoding,
|
||||||
|
|||||||
@ -73,6 +73,7 @@ import qualified Control.Exception as C
|
|||||||
import Control.Monad (when)
|
import Control.Monad (when)
|
||||||
import Data.Char
|
import Data.Char
|
||||||
import Data.Default
|
import Data.Default
|
||||||
|
import Data.Either (isRight)
|
||||||
import Data.Functor.Identity (Identity)
|
import Data.Functor.Identity (Identity)
|
||||||
import "base-compat-batteries" Data.List.Compat
|
import "base-compat-batteries" Data.List.Compat
|
||||||
import Data.List.Extra (nubSort)
|
import Data.List.Extra (nubSort)
|
||||||
|
|||||||
@ -23,6 +23,7 @@ import Control.Monad.Trans.Class
|
|||||||
import Control.Monad.State.Strict (evalState, evalStateT)
|
import Control.Monad.State.Strict (evalState, evalStateT)
|
||||||
import Control.Monad.Trans (liftIO)
|
import Control.Monad.Trans (liftIO)
|
||||||
import Data.Char (toUpper, toLower)
|
import Data.Char (toUpper, toLower)
|
||||||
|
import Data.Either (isRight)
|
||||||
import Data.Functor.Identity (Identity(..))
|
import Data.Functor.Identity (Identity(..))
|
||||||
import "base-compat-batteries" Data.List.Compat
|
import "base-compat-batteries" Data.List.Compat
|
||||||
import qualified Data.Set as S
|
import qualified Data.Set as S
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user