From 702c9584879e0590161fd64498abcf2f0db0438f Mon Sep 17 00:00:00 2001 From: Stephen Morgan Date: Fri, 28 Feb 2020 18:31:53 +1100 Subject: [PATCH] lib: Replace some utility functions with library functions. --- hledger-lib/Hledger/Data/Dates.hs | 7 ++++--- hledger-lib/Hledger/Read.hs | 3 ++- hledger-lib/Hledger/Read/CsvReader.hs | 2 +- hledger-lib/Hledger/Read/JournalReader.hs | 1 + hledger-lib/Hledger/Utils.hs | 11 ----------- hledger/Hledger/Cli/CliOptions.hs | 1 + hledger/Hledger/Cli/Commands/Add.hs | 1 + 7 files changed, 10 insertions(+), 16 deletions(-) diff --git a/hledger-lib/Hledger/Data/Dates.hs b/hledger-lib/Hledger/Data/Dates.hs index c734b7097..9b44f52f2 100644 --- a/hledger-lib/Hledger/Data/Dates.hs +++ b/hledger-lib/Hledger/Data/Dates.hs @@ -84,6 +84,7 @@ import Control.Applicative.Permutations import Control.Monad (guard, unless) import "base-compat-batteries" Data.List.Compat import Data.Default +import Data.Foldable (asum) import Data.Maybe import qualified Data.Set as Set import Data.Text (Text) @@ -654,7 +655,7 @@ advancetonthweekday n wd s = -- -- | Parse a couple of date-time string formats to a time type. -- 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 -- ] @@ -672,9 +673,9 @@ parsetime = -- `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". parsedateM :: String -> Maybe Day -parsedateM s = firstJust [ - parsetime defaultTimeLocale "%Y/%m/%d" s, +parsedateM s = asum [ parsetime defaultTimeLocale "%Y-%m-%d" s, + parsetime defaultTimeLocale "%Y/%m/%d" s, parsetime defaultTimeLocale "%Y.%m.%d" s ] diff --git a/hledger-lib/Hledger/Read.hs b/hledger-lib/Hledger/Read.hs index 01528ec8d..f6bf68ae9 100644 --- a/hledger-lib/Hledger/Read.hs +++ b/hledger-lib/Hledger/Read.hs @@ -49,6 +49,7 @@ import qualified Control.Exception as C import Control.Monad (when) import "mtl" Control.Monad.Except (runExceptT) import Data.Default +import Data.Foldable (asum) import Data.List import Data.Maybe import Data.Ord @@ -170,7 +171,7 @@ readJournalFile :: InputOpts -> PrefixedFilePath -> IO (Either String Journal) readJournalFile iopts prefixedfile = do let (mfmt, f) = splitReaderPrefix prefixedfile - iopts' = iopts{mformat_=firstJust [mfmt, mformat_ iopts]} + iopts' = iopts{mformat_=asum [mfmt, mformat_ iopts]} requireJournalFileExists f t <- readFileOrStdinPortably f -- <- T.readFile f -- or without line ending translation, for testing diff --git a/hledger-lib/Hledger/Read/CsvReader.hs b/hledger-lib/Hledger/Read/CsvReader.hs index 8d62fcd31..04bde3e1e 100644 --- a/hledger-lib/Hledger/Read/CsvReader.hs +++ b/hledger-lib/Hledger/Read/CsvReader.hs @@ -1152,7 +1152,7 @@ csvFieldValue rules record fieldname = do -- the "simple date" formats (YYYY/MM/DD, YYYY-MM-DD, YYYY.MM.DD, leading -- zeroes optional). parseDateWithCustomOrDefaultFormats :: Maybe DateFormat -> String -> Maybe Day -parseDateWithCustomOrDefaultFormats mformat s = firstJust $ map parsewith formats +parseDateWithCustomOrDefaultFormats mformat s = asum $ map parsewith formats where parsetime = #if MIN_VERSION_time(1,5,0) diff --git a/hledger-lib/Hledger/Read/JournalReader.hs b/hledger-lib/Hledger/Read/JournalReader.hs index 8ba5ae25a..e20380cd2 100644 --- a/hledger-lib/Hledger/Read/JournalReader.hs +++ b/hledger-lib/Hledger/Read/JournalReader.hs @@ -82,6 +82,7 @@ import Control.Monad.IO.Class (MonadIO, liftIO) import Control.Monad.Except (ExceptT(..), runExceptT) import Control.Monad.State.Strict (get,modify',put) import Control.Monad.Trans.Class (lift) +import Data.Either (isRight) import qualified Data.Map.Strict as M #if !(MIN_VERSION_base(4,11,0)) import Data.Monoid ((<>)) diff --git a/hledger-lib/Hledger/Utils.hs b/hledger-lib/Hledger/Utils.hs index 0c172d66c..fb0c172b4 100644 --- a/hledger-lib/Hledger/Utils.hs +++ b/hledger-lib/Hledger/Utils.hs @@ -146,13 +146,6 @@ getCurrentZonedTime = do 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, -- which should be > 0 (otherwise does nothing). -- Possibly uses O(n) stack ? @@ -178,10 +171,6 @@ expandHomePath = \case ('~':_) -> ioError $ userError "~USERNAME in paths is not supported" p -> return p -firstJust ms = case dropWhile (==Nothing) ms of - [] -> Nothing - (md:_) -> md - -- | Read text from a file, -- converting any \r\n line endings to \n,, -- using the system locale's text encoding, diff --git a/hledger/Hledger/Cli/CliOptions.hs b/hledger/Hledger/Cli/CliOptions.hs index 67a4ce486..f7bc41178 100644 --- a/hledger/Hledger/Cli/CliOptions.hs +++ b/hledger/Hledger/Cli/CliOptions.hs @@ -73,6 +73,7 @@ import qualified Control.Exception as C import Control.Monad (when) import Data.Char import Data.Default +import Data.Either (isRight) import Data.Functor.Identity (Identity) import "base-compat-batteries" Data.List.Compat import Data.List.Extra (nubSort) diff --git a/hledger/Hledger/Cli/Commands/Add.hs b/hledger/Hledger/Cli/Commands/Add.hs index 9d950bd3d..3bd9f8bd0 100644 --- a/hledger/Hledger/Cli/Commands/Add.hs +++ b/hledger/Hledger/Cli/Commands/Add.hs @@ -23,6 +23,7 @@ import Control.Monad.Trans.Class import Control.Monad.State.Strict (evalState, evalStateT) import Control.Monad.Trans (liftIO) import Data.Char (toUpper, toLower) +import Data.Either (isRight) import Data.Functor.Identity (Identity(..)) import "base-compat-batteries" Data.List.Compat import qualified Data.Set as S