diff --git a/hledger-lib/Hledger/Data/Account.hs b/hledger-lib/Hledger/Data/Account.hs index 0e7fadc14..66bd94499 100644 --- a/hledger-lib/Hledger/Data/Account.hs +++ b/hledger-lib/Hledger/Data/Account.hs @@ -34,7 +34,10 @@ module Hledger.Data.Account import qualified Data.HashSet as HS import qualified Data.HashMap.Strict as HM -import Data.List (find, foldl', sortOn) +import Data.List (find, sortOn) +#if !MIN_VERSION_base(4,20,0) +import Data.List (foldl') +#endif import Data.List.Extra (groupOn) import qualified Data.Map as M import Data.Ord (Down(..)) diff --git a/hledger-lib/Hledger/Data/Amount.hs b/hledger-lib/Hledger/Data/Amount.hs index 3f8a5e2eb..db7b2a0c6 100644 --- a/hledger-lib/Hledger/Data/Amount.hs +++ b/hledger-lib/Hledger/Data/Amount.hs @@ -39,6 +39,7 @@ with similar amounts since it mostly ignores costss and commodity exchange rates -} +{-# LANGUAGE CPP #-} {-# LANGUAGE OverloadedStrings #-} {-# LANGUAGE RecordWildCards #-} {-# LANGUAGE NamedFieldPuns #-} @@ -175,7 +176,10 @@ import Data.Char (isDigit) import Data.Decimal (DecimalRaw(..), decimalPlaces, normalizeDecimal, roundTo) import Data.Default (Default(..)) import Data.Foldable (toList) -import Data.List (find, foldl', intercalate, intersperse, mapAccumL, partition) +import Data.List (find, intercalate, intersperse, mapAccumL, partition) +#if !MIN_VERSION_base(4,20,0) +import Data.List (foldl') +#endif import Data.List.NonEmpty (NonEmpty(..), nonEmpty) import qualified Data.Map.Strict as M import qualified Data.Set as S diff --git a/hledger-lib/Hledger/Data/Journal.hs b/hledger-lib/Hledger/Data/Journal.hs index 87fda5196..f6d1d1631 100644 --- a/hledger-lib/Hledger/Data/Journal.hs +++ b/hledger-lib/Hledger/Data/Journal.hs @@ -1,9 +1,10 @@ +{-# LANGUAGE CPP #-} {-# LANGUAGE NamedFieldPuns #-} {-# LANGUAGE OverloadedStrings #-} {-# LANGUAGE Rank2Types #-} {-# LANGUAGE ScopedTypeVariables #-} {-# LANGUAGE TupleSections #-} -{-# LANGUAGE RecordWildCards #-} +{-# LANGUAGE RecordWildCards #-} {-| @@ -122,7 +123,10 @@ import Control.Monad.State.Strict (StateT) import Data.Char (toUpper, isDigit) import Data.Default (Default(..)) import Data.Foldable (toList) -import Data.List ((\\), find, foldl', sortBy, union, intercalate) +import Data.List ((\\), find, sortBy, union, intercalate) +#if !MIN_VERSION_base(4,20,0) +import Data.List (foldl') +#endif import Data.List.Extra (nubSort) import qualified Data.Map.Strict as M import Data.Maybe (catMaybes, fromMaybe, mapMaybe, maybeToList) diff --git a/hledger-lib/Hledger/Data/Posting.hs b/hledger-lib/Hledger/Data/Posting.hs index fb9cfed76..4a36c5730 100644 --- a/hledger-lib/Hledger/Data/Posting.hs +++ b/hledger-lib/Hledger/Data/Posting.hs @@ -1,4 +1,3 @@ -{-# LANGUAGE NamedFieldPuns #-} {-| A 'Posting' represents a change (by some 'MixedAmount') of the balance in @@ -8,6 +7,8 @@ look up the date or description there. -} +{-# LANGUAGE CPP #-} +{-# LANGUAGE NamedFieldPuns #-} {-# LANGUAGE OverloadedStrings #-} module Hledger.Data.Posting ( @@ -82,7 +83,10 @@ import Data.Foldable (asum) import Data.Function ((&)) import qualified Data.Map as M import Data.Maybe (fromMaybe, isJust, mapMaybe) -import Data.List (foldl', sort, union) +import Data.List (sort, union) +#if !MIN_VERSION_base(4,20,0) +import Data.List (foldl') +#endif import qualified Data.Set as S import Data.Text (Text) import qualified Data.Text as T diff --git a/hledger-lib/Hledger/Read/RulesReader.hs b/hledger-lib/Hledger/Read/RulesReader.hs index 3a29b348b..e52c6ad4b 100644 --- a/hledger-lib/Hledger/Read/RulesReader.hs +++ b/hledger-lib/Hledger/Read/RulesReader.hs @@ -14,6 +14,7 @@ Most of the code for reading rules files and csv files is in this module. -- stack haddock hledger-lib --fast --no-haddock-deps --haddock-arguments='--ignore-all-exports' --open --- ** language +{-# LANGUAGE CPP #-} {-# LANGUAGE FlexibleInstances #-} {-# LANGUAGE OverloadedStrings #-} {-# LANGUAGE RecordWildCards #-} @@ -52,7 +53,10 @@ import Control.Monad.Trans.Class (lift) import Data.Char (toLower, isDigit, isSpace, isAlphaNum, ord) import Data.Bifunctor (first) import Data.Functor ((<&>)) -import Data.List (elemIndex, foldl', mapAccumL, nub, sortOn) +import Data.List (elemIndex, mapAccumL, nub, sortOn) +#if !MIN_VERSION_base(4,20,0) +import Data.List (foldl') +#endif import Data.List.Extra (groupOn) import Data.Maybe (catMaybes, fromMaybe, isJust) import Data.MemoUgly (memo) @@ -1325,9 +1329,7 @@ parseAmount rules record currency s = ,showRules rules record -- ,"the default-currency is: "++fromMaybe "unspecified" (getDirective "default-currency" rules) ,"the parse error is: " <> T.pack (customErrorBundlePretty e) - ,"you may need to \ - \change your amount*, balance*, or currency* rules, \ - \or add or change your skip rule" + ,"you may need to change your amount*, balance*, or currency* rules, or add or change your skip rule" ] -- | Show the values assigned to each journal field. diff --git a/hledger-lib/Hledger/Utils.hs b/hledger-lib/Hledger/Utils.hs index 3435dceb1..cd54380a5 100644 --- a/hledger-lib/Hledger/Utils.hs +++ b/hledger-lib/Hledger/Utils.hs @@ -3,6 +3,8 @@ Utilities used throughout hledger, or needed low in the module hierarchy. These are the bottom of hledger's module graph. -} +{-# LANGUAGE CPP #-} + module Hledger.Utils ( -- * Functions @@ -69,7 +71,10 @@ where import Data.Char (toLower) import Data.List (intersperse) -import Data.List.Extra (chunksOf, foldl', foldl1', uncons, unsnoc) +import Data.List.Extra (chunksOf, foldl1', uncons, unsnoc) +#if !MIN_VERSION_base(4,20,0) +import Data.List (foldl') +#endif import qualified Data.Set as Set import qualified Data.Text as T (pack, unpack) import Data.Tree (foldTree, Tree (Node, subForest)) diff --git a/hledger-lib/Hledger/Utils/Regex.hs b/hledger-lib/Hledger/Utils/Regex.hs index 6e65f115c..5d99b383b 100644 --- a/hledger-lib/Hledger/Utils/Regex.hs +++ b/hledger-lib/Hledger/Utils/Regex.hs @@ -1,7 +1,3 @@ -{-# LANGUAGE FlexibleInstances #-} -{-# LANGUAGE MultiParamTypeClasses #-} -{-# LANGUAGE OverloadedStrings #-} -{-# LANGUAGE ScopedTypeVariables #-} {-| Easy regular expression helpers, currently based on regex-tdfa. These should: @@ -42,6 +38,12 @@ Current limitations: -} +{-# LANGUAGE CPP #-} +{-# LANGUAGE FlexibleInstances #-} +{-# LANGUAGE MultiParamTypeClasses #-} +{-# LANGUAGE OverloadedStrings #-} +{-# LANGUAGE ScopedTypeVariables #-} + module Hledger.Utils.Regex ( -- * Regexp type and constructors Regexp(reString) @@ -66,7 +68,9 @@ import Control.Monad (foldM) import Data.Aeson (ToJSON(..), Value(String)) import Data.Array ((!), elems, indices) import Data.Char (isDigit) +#if !MIN_VERSION_base(4,20,0) import Data.List (foldl') +#endif import Data.MemoUgly (memo) import Data.Text (Text) import qualified Data.Text as T diff --git a/hledger/Hledger/Cli/Commands/Balance.hs b/hledger/Hledger/Cli/Commands/Balance.hs index dd80da384..773377abd 100644 --- a/hledger/Hledger/Cli/Commands/Balance.hs +++ b/hledger/Hledger/Cli/Commands/Balance.hs @@ -233,6 +233,7 @@ Currently, empty cells show 0. -} +{-# LANGUAGE CPP #-} {-# LANGUAGE OverloadedStrings #-} {-# LANGUAGE NamedFieldPuns #-} {-# LANGUAGE RecordWildCards #-} @@ -272,7 +273,10 @@ import Control.Monad (guard) import Data.Decimal (roundTo) import Data.Default (def) import Data.Function (on) -import Data.List (find, transpose, foldl') +import Data.List (find, transpose) +#if !MIN_VERSION_base(4,20,0) +import Data.List (foldl') +#endif import qualified Data.Map as Map import qualified Data.Set as S import Data.Maybe (mapMaybe, fromMaybe) diff --git a/hledger/Hledger/Cli/Commands/Rewrite.hs b/hledger/Hledger/Cli/Commands/Rewrite.hs index 0fa4f35b2..816fa3d13 100644 --- a/hledger/Hledger/Cli/Commands/Rewrite.hs +++ b/hledger/Hledger/Cli/Commands/Rewrite.hs @@ -1,3 +1,4 @@ +{-# LANGUAGE CPP #-} {-# LANGUAGE DeriveTraversable #-} {-# LANGUAGE LambdaCase #-} {-# LANGUAGE OverloadedStrings #-} @@ -11,7 +12,10 @@ module Hledger.Cli.Commands.Rewrite ( where import Data.Functor.Identity -import Data.List (sortOn, foldl') +import Data.List (sortOn) +#if !MIN_VERSION_base(4,20,0) +import Data.List (foldl') +#endif import Data.Text (Text) import qualified Data.Text as T import qualified Data.Text.IO as T diff --git a/hledger/Hledger/Cli/CompoundBalanceCommand.hs b/hledger/Hledger/Cli/CompoundBalanceCommand.hs index 2a5a59ac3..7d99a76d3 100644 --- a/hledger/Hledger/Cli/CompoundBalanceCommand.hs +++ b/hledger/Hledger/Cli/CompoundBalanceCommand.hs @@ -1,3 +1,4 @@ +{-# LANGUAGE CPP #-} {-# LANGUAGE OverloadedStrings #-} {-# LANGUAGE RecordWildCards #-} {-# LANGUAGE LambdaCase #-} @@ -14,7 +15,9 @@ module Hledger.Cli.CompoundBalanceCommand ( ,compoundBalanceCommand ) where +#if !MIN_VERSION_base(4,20,0) import Data.List (foldl') +#endif import Data.Maybe (fromMaybe, mapMaybe) import qualified Data.Text as T import qualified Data.Text.Lazy as TL