diff --git a/hledger-lib/Hledger/Data/Dates.hs b/hledger-lib/Hledger/Data/Dates.hs index 23882e44d..6c16d5ac1 100644 --- a/hledger-lib/Hledger/Data/Dates.hs +++ b/hledger-lib/Hledger/Data/Dates.hs @@ -77,9 +77,10 @@ module Hledger.Data.Dates ( where import Prelude () -import "base-compat-batteries" Prelude.Compat +import "base-compat-batteries" Prelude.Compat hiding (fail) +import qualified "base-compat-batteries" Control.Monad.Fail.Compat as Fail (MonadFail, fail) import Control.Applicative.Permutations -import Control.Monad +import Control.Monad (unless) import "base-compat-batteries" Data.List.Compat import Data.Default import Data.Maybe @@ -771,10 +772,10 @@ validYear s = length s >= 4 && isJust (readMay s :: Maybe Year) validMonth s = maybe False (\n -> n>=1 && n<=12) $ readMay s validDay s = maybe False (\n -> n>=1 && n<=31) $ readMay s -failIfInvalidYear, failIfInvalidMonth, failIfInvalidDay :: (Monad m) => String -> m () -failIfInvalidYear s = unless (validYear s) $ fail $ "bad year number: " ++ s -failIfInvalidMonth s = unless (validMonth s) $ fail $ "bad month number: " ++ s -failIfInvalidDay s = unless (validDay s) $ fail $ "bad day number: " ++ s +failIfInvalidYear, failIfInvalidMonth, failIfInvalidDay :: (Fail.MonadFail m) => String -> m () +failIfInvalidYear s = unless (validYear s) $ Fail.fail $ "bad year number: " ++ s +failIfInvalidMonth s = unless (validMonth s) $ Fail.fail $ "bad month number: " ++ s +failIfInvalidDay s = unless (validDay s) $ Fail.fail $ "bad day number: " ++ s yyyymmdd :: TextParser m SmartDate yyyymmdd = do @@ -864,8 +865,8 @@ weekday = do wday <- T.toLower <$> (choice . map string' $ weekdays ++ weekdayabbrevs) case catMaybes $ [wday `elemIndex` weekdays, wday `elemIndex` weekdayabbrevs] of (i:_) -> return (i+1) - [] -> fail $ "weekday: should not happen: attempted to find " <> - show wday <> " in " <> show (weekdays ++ weekdayabbrevs) + [] -> Fail.fail $ "weekday: should not happen: attempted to find " <> + show wday <> " in " <> show (weekdays ++ weekdayabbrevs) today,yesterday,tomorrow :: TextParser m SmartDate today = string' "today" >> return ("","","today") diff --git a/hledger-lib/Hledger/Read/Common.hs b/hledger-lib/Hledger/Read/Common.hs index fd25eee8b..e4ee6b195 100644 --- a/hledger-lib/Hledger/Read/Common.hs +++ b/hledger-lib/Hledger/Read/Common.hs @@ -100,10 +100,10 @@ module Hledger.Read.Common ( where --- * imports import Prelude () -import "base-compat-batteries" Prelude.Compat hiding (readFile) -import "base-compat-batteries" Control.Monad.Compat +import "base-compat-batteries" Prelude.Compat hiding (fail, readFile) +import qualified "base-compat-batteries" Control.Monad.Fail.Compat as Fail (fail) import Control.Monad.Except (ExceptT(..), runExceptT, throwError) -import Control.Monad.State.Strict +import Control.Monad.State.Strict hiding (fail) import Data.Bifunctor (bimap, second) import Data.Char import Data.Data @@ -781,7 +781,7 @@ numberp suggestedStyle = label "number" $ do dbg8 "numberp suggestedStyle" suggestedStyle `seq` return () case dbg8 "numberp quantity,precision,mdecimalpoint,mgrps" $ fromRawNumber rawNum mExp of - Left errMsg -> fail errMsg + Left errMsg -> Fail.fail errMsg Right (q, p, d, g) -> pure (sign q, p, d, g) exponentp :: TextParser m Int @@ -883,7 +883,7 @@ rawnumberp = label "number" $ do -- Guard against mistyped numbers mExtraDecimalSep <- optional $ lookAhead $ satisfy isDecimalPointChar when (isJust mExtraDecimalSep) $ - fail "invalid number (invalid use of separator)" + Fail.fail "invalid number (invalid use of separator)" mExtraFragment <- optional $ lookAhead $ try $ char ' ' *> getOffset <* digitChar @@ -1273,7 +1273,7 @@ bracketeddatetagsp mYear1 = do $ between (char '[') (char ']') $ takeWhile1P Nothing isBracketedDateChar unless (T.any isDigit s && T.any isDateSepChar s) $ - fail "not a bracketed date" + Fail.fail "not a bracketed date" -- Looks sufficiently like a bracketed date to commit to parsing a date between (char '[') (char ']') $ do diff --git a/hledger-lib/Hledger/Read/CsvReader.hs b/hledger-lib/Hledger/Read/CsvReader.hs index 2802f0872..06e7ca780 100644 --- a/hledger-lib/Hledger/Read/CsvReader.hs +++ b/hledger-lib/Hledger/Read/CsvReader.hs @@ -31,7 +31,8 @@ module Hledger.Read.CsvReader ( ) where import Prelude () -import "base-compat-batteries" Prelude.Compat +import "base-compat-batteries" Prelude.Compat hiding (fail) +import qualified "base-compat-batteries" Control.Monad.Fail.Compat as Fail (fail) import Control.Exception hiding (try) import Control.Monad import Control.Monad.Except @@ -599,7 +600,7 @@ conditionalblockp = do ms <- some recordmatcherp as <- many (lift (skipSome spacenonewline) >> fieldassignmentp) when (null as) $ - fail "start of conditional block found, but no assignment rules afterward\n(assignment rules in a conditional block should be indented)\n" + Fail.fail "start of conditional block found, but no assignment rules afterward\n(assignment rules in a conditional block should be indented)\n" return (ms, as) "conditional block" @@ -610,7 +611,7 @@ recordmatcherp = do _ <- optional (matchoperatorp >> lift (skipMany spacenonewline) >> optional newline) ps <- patternsp when (null ps) $ - fail "start of record matcher found, but no patterns afterward\n(patterns should not be indented)\n" + Fail.fail "start of record matcher found, but no patterns afterward\n(patterns should not be indented)\n" return ps "record matcher" diff --git a/hledger-lib/Hledger/Read/JournalReader.hs b/hledger-lib/Hledger/Read/JournalReader.hs index 5c94b60a9..78c5ebf8e 100644 --- a/hledger-lib/Hledger/Read/JournalReader.hs +++ b/hledger-lib/Hledger/Read/JournalReader.hs @@ -63,12 +63,15 @@ module Hledger.Read.JournalReader ( ) where --- * imports -import Prelude () -import "base-compat-batteries" Prelude.Compat hiding (readFile) +import qualified Prelude (fail) +import "base-compat-batteries" Prelude.Compat hiding (fail, readFile) +import qualified "base-compat-batteries" Control.Monad.Fail.Compat as Fail (fail) import qualified Control.Exception as C -import Control.Monad +import Control.Monad (forM_, when, void) +import Control.Monad.IO.Class (MonadIO, liftIO) import Control.Monad.Except (ExceptT(..), runExceptT) -import Control.Monad.State.Strict +import Control.Monad.State.Strict (get,modify',put) +import Control.Monad.Trans.Class (lift) import qualified Data.Map.Strict as M import Data.Text (Text) import Data.String @@ -215,7 +218,7 @@ includedirectivep = do let parentfilestack = jincludefilestack parentj when (filepath `elem` parentfilestack) $ - fail ("Cyclic include: " ++ filepath) + Fail.fail ("Cyclic include: " ++ filepath) childInput <- lift $ readFilePortably filepath `orRethrowIOError` (show parentpos ++ " reading " ++ filepath) @@ -251,7 +254,7 @@ orRethrowIOError io msg = do eResult <- liftIO $ (Right <$> io) `C.catch` \(e::C.IOException) -> pure $ Left $ printf "%s:\n%s" msg (show e) case eResult of Right res -> pure res - Left errMsg -> fail errMsg + Left errMsg -> Fail.fail errMsg -- Parse an account directive, adding its info to the journal's -- list of account declarations. @@ -682,7 +685,7 @@ tests_JournalReader = tests "JournalReader" [ test "yearless date with default year" $ do let s = "1/1" ep <- parseWithState mempty{jparsedefaultyear=Just 2018} datep s - either (fail.("parse error at "++).customErrorBundlePretty) (const ok) ep + either (Prelude.fail . ("parse error at "++) . customErrorBundlePretty) (const ok) ep test "no leading zero" $ expectParse datep "2018/1/1" ,test "datetimep" $ do diff --git a/hledger-lib/hledger-lib.cabal b/hledger-lib/hledger-lib.cabal index 40efdda3f..f490404a6 100644 --- a/hledger-lib/hledger-lib.cabal +++ b/hledger-lib/hledger-lib.cabal @@ -4,7 +4,7 @@ cabal-version: 1.12 -- -- see: https://github.com/sol/hpack -- --- hash: 567ed725b211714a0f6db5e17a68d670789c7e603020b42d6b8f18e7af5ceb63 +-- hash: c4535c00ecf88919b278f19cdd8f72caf2212d43fb3dc6ee21299451ee977ea0 name: hledger-lib version: 1.15.2 @@ -108,7 +108,7 @@ library , ansi-terminal >=0.6.2.3 , array , base >=4.8 && <4.13 - , base-compat-batteries >=0.10.1 && <0.11 + , base-compat-batteries >=0.10.1 && <0.12 , blaze-markup >=0.5.1 , bytestring , call-stack @@ -211,7 +211,7 @@ test-suite doctests , ansi-terminal >=0.6.2.3 , array , base >=4.8 && <4.13 - , base-compat-batteries >=0.10.1 && <0.11 + , base-compat-batteries >=0.10.1 && <0.12 , blaze-markup >=0.5.1 , bytestring , call-stack @@ -317,7 +317,7 @@ test-suite easytests , ansi-terminal >=0.6.2.3 , array , base >=4.8 && <4.13 - , base-compat-batteries >=0.10.1 && <0.11 + , base-compat-batteries >=0.10.1 && <0.12 , blaze-markup >=0.5.1 , bytestring , call-stack diff --git a/hledger-lib/package.yaml b/hledger-lib/package.yaml index a5055f150..1af910ef9 100644 --- a/hledger-lib/package.yaml +++ b/hledger-lib/package.yaml @@ -40,7 +40,7 @@ extra-source-files: dependencies: - base >=4.8 && <4.13 -- base-compat-batteries >=0.10.1 && <0.11 +- base-compat-batteries >=0.10.1 && <0.12 - ansi-terminal >=0.6.2.3 - array - blaze-markup >=0.5.1 diff --git a/hledger-ui/hledger-ui.cabal b/hledger-ui/hledger-ui.cabal index 8a50525c4..b47bae373 100644 --- a/hledger-ui/hledger-ui.cabal +++ b/hledger-ui/hledger-ui.cabal @@ -4,7 +4,7 @@ cabal-version: 1.12 -- -- see: https://github.com/sol/hpack -- --- hash: 0deef0df7a1a0ef153ebf7e31ddd57882a2671941a0f801bc2980dae7080501f +-- hash: b157e8031b886cdba4226a4710189f672b05418f5bb4889477f6b3b6369c6f4d name: hledger-ui version: 1.15 @@ -69,7 +69,7 @@ executable hledger-ui ansi-terminal >=0.6.2.3 , async , base >=4.8 && <4.13 - , base-compat-batteries >=0.10.1 && <0.11 + , base-compat-batteries >=0.10.1 && <0.12 , cmdargs >=0.8 , containers , data-default diff --git a/hledger-ui/package.yaml b/hledger-ui/package.yaml index 72466a350..52f9ee3f9 100644 --- a/hledger-ui/package.yaml +++ b/hledger-ui/package.yaml @@ -45,7 +45,7 @@ dependencies: - ansi-terminal >=0.6.2.3 - async - base >=4.8 && <4.13 -- base-compat-batteries >=0.10.1 && <0.11 +- base-compat-batteries >=0.10.1 && <0.12 - cmdargs >=0.8 - containers - data-default diff --git a/hledger/Hledger/Cli/Commands/Add.hs b/hledger/Hledger/Cli/Commands/Add.hs index 8f48a899a..58b24913a 100644 --- a/hledger/Hledger/Cli/Commands/Add.hs +++ b/hledger/Hledger/Cli/Commands/Add.hs @@ -16,9 +16,9 @@ module Hledger.Cli.Commands.Add ( where import Prelude () -import "base-compat-batteries" Prelude.Compat +import "base-compat-batteries" Prelude.Compat hiding (fail) import Control.Exception as E -import Control.Monad +import Control.Monad (when) import Control.Monad.Trans.Class import Control.Monad.State.Strict (evalState, evalStateT) import Control.Monad.Trans (liftIO) @@ -118,7 +118,7 @@ getAndAddTransactions :: EntryState -> IO () getAndAddTransactions es@EntryState{..} = (do mt <- runInputT (setComplete noCompletion defaultSettings) (System.Console.Wizard.run $ haskeline $ confirmedTransactionWizard es) case mt of - Nothing -> fail "urk ?" + Nothing -> error "Could not interpret the input, restarting" -- caught below causing a restart, I believe Just t -> do j <- if debug_ esOpts > 0 then do hPrintf stderr "Skipping journal add due to debug mode.\n" diff --git a/hledger/hledger.cabal b/hledger/hledger.cabal index 50a4b0bd3..17afdad50 100644 --- a/hledger/hledger.cabal +++ b/hledger/hledger.cabal @@ -4,7 +4,7 @@ cabal-version: 1.12 -- -- see: https://github.com/sol/hpack -- --- hash: f839c60877b230c5cb9cffe709ab8f7f6d770f16c15c68c25b3aed3cc0c65bb0 +-- hash: f7a17b233540faa8cabd06b8cdac862fff8b1c1dfcaa46d74467bff5a0f1853b name: hledger version: 1.15.2 @@ -152,7 +152,7 @@ library , Diff , ansi-terminal >=0.6.2.3 , base >=4.8 && <4.13 - , base-compat-batteries >=0.10.1 && <0.11 + , base-compat-batteries >=0.10.1 && <0.12 , bytestring , cmdargs >=0.10 , containers @@ -204,7 +204,7 @@ executable hledger Decimal , ansi-terminal >=0.6.2.3 , base >=4.8 && <4.13 - , base-compat-batteries >=0.10.1 && <0.11 + , base-compat-batteries >=0.10.1 && <0.12 , bytestring , cmdargs >=0.10 , containers @@ -258,7 +258,7 @@ test-suite test Decimal , ansi-terminal >=0.6.2.3 , base >=4.8 && <4.13 - , base-compat-batteries >=0.10.1 && <0.11 + , base-compat-batteries >=0.10.1 && <0.12 , bytestring , cmdargs >=0.10 , containers @@ -311,7 +311,7 @@ benchmark bench Decimal , ansi-terminal >=0.6.2.3 , base >=4.8 && <4.13 - , base-compat-batteries >=0.10.1 && <0.11 + , base-compat-batteries >=0.10.1 && <0.12 , bytestring , cmdargs >=0.10 , containers diff --git a/hledger/package.yaml b/hledger/package.yaml index 7958bda5a..df6bc10aa 100644 --- a/hledger/package.yaml +++ b/hledger/package.yaml @@ -111,7 +111,7 @@ dependencies: - hledger-lib >=1.15.2 && <1.16 - ansi-terminal >=0.6.2.3 - base >=4.8 && <4.13 -- base-compat-batteries >=0.10.1 && <0.11 +- base-compat-batteries >=0.10.1 && <0.12 - bytestring - cmdargs >=0.10 - containers diff --git a/stack.yaml b/stack.yaml index 086772d4f..e270eacd6 100644 --- a/stack.yaml +++ b/stack.yaml @@ -18,6 +18,9 @@ nix: extra-deps: # for hledger-lib: +# testing: +# - base-compat-batteries-0.11.0 +# - base-compat-0.11.0 # for hledger: # for hledger-ui: # for hledger-web: