lib: Replace some utility functions with library functions.

This commit is contained in:
Stephen Morgan 2020-02-28 18:31:53 +11:00 committed by Simon Michael
parent 0ddb5fa4e3
commit 702c958487
7 changed files with 10 additions and 16 deletions

View File

@ -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
]

View File

@ -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

View File

@ -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)

View File

@ -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 ((<>))

View File

@ -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,

View File

@ -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)

View File

@ -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