lib, cli, ui: start using Control.Monad.Fail, allow base-compat 0.11
fail is moving out of Monad and into it's own MonadFail class. This will be enforced in GHC 8.8 (I think). base-compat/base-compat-batteries 0.11.0 have adapted to this, and are approaching stackage nightly (https://github.com/commercialhaskell/stackage/issues/4802). hledger is now ready to build with base-compat-batteries 0.11.0, once all of our deps do (eg aeson). We are still compatible with the older 0.10.x and GHC 7.10.3 as well. For now we are using both fails: - new fail (from Control.Monad.Fail), used in our parsers, imported via base-compat-batteries Control.Monad.Fail.Compat to work with older GHC versions. - old fail (from GHC.Base, exported by Prelude, Control.Monad, Control.Monad.State.Strict, Prelude.Compat, ...), used in easytest's Test, since I couldn't find their existing fail implementation to update. To reduce (my) confusion, these are imported carefully, consistently, and qualified everywhere as Fail.fail and Prelude.fail, with clashing re-exports suppressed, like so: import Prelude hiding (fail) import qualified Prelude (fail) import Control.Monad.State.Strict hiding (fail) import "base-compat-batteries" Prelude.Compat hiding (fail) import qualified "base-compat-batteries" Control.Monad.Fail.Compat as Fail
This commit is contained in:
parent
c7746131fc
commit
499e20c0b2
@ -77,9 +77,10 @@ module Hledger.Data.Dates (
|
|||||||
where
|
where
|
||||||
|
|
||||||
import Prelude ()
|
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.Applicative.Permutations
|
||||||
import Control.Monad
|
import Control.Monad (unless)
|
||||||
import "base-compat-batteries" Data.List.Compat
|
import "base-compat-batteries" Data.List.Compat
|
||||||
import Data.Default
|
import Data.Default
|
||||||
import Data.Maybe
|
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
|
validMonth s = maybe False (\n -> n>=1 && n<=12) $ readMay s
|
||||||
validDay s = maybe False (\n -> n>=1 && n<=31) $ readMay s
|
validDay s = maybe False (\n -> n>=1 && n<=31) $ readMay s
|
||||||
|
|
||||||
failIfInvalidYear, failIfInvalidMonth, failIfInvalidDay :: (Monad m) => String -> m ()
|
failIfInvalidYear, failIfInvalidMonth, failIfInvalidDay :: (Fail.MonadFail m) => String -> m ()
|
||||||
failIfInvalidYear s = unless (validYear s) $ fail $ "bad year number: " ++ s
|
failIfInvalidYear s = unless (validYear s) $ Fail.fail $ "bad year number: " ++ s
|
||||||
failIfInvalidMonth s = unless (validMonth s) $ fail $ "bad month number: " ++ s
|
failIfInvalidMonth s = unless (validMonth s) $ Fail.fail $ "bad month number: " ++ s
|
||||||
failIfInvalidDay s = unless (validDay s) $ fail $ "bad day number: " ++ s
|
failIfInvalidDay s = unless (validDay s) $ Fail.fail $ "bad day number: " ++ s
|
||||||
|
|
||||||
yyyymmdd :: TextParser m SmartDate
|
yyyymmdd :: TextParser m SmartDate
|
||||||
yyyymmdd = do
|
yyyymmdd = do
|
||||||
@ -864,7 +865,7 @@ weekday = do
|
|||||||
wday <- T.toLower <$> (choice . map string' $ weekdays ++ weekdayabbrevs)
|
wday <- T.toLower <$> (choice . map string' $ weekdays ++ weekdayabbrevs)
|
||||||
case catMaybes $ [wday `elemIndex` weekdays, wday `elemIndex` weekdayabbrevs] of
|
case catMaybes $ [wday `elemIndex` weekdays, wday `elemIndex` weekdayabbrevs] of
|
||||||
(i:_) -> return (i+1)
|
(i:_) -> return (i+1)
|
||||||
[] -> fail $ "weekday: should not happen: attempted to find " <>
|
[] -> Fail.fail $ "weekday: should not happen: attempted to find " <>
|
||||||
show wday <> " in " <> show (weekdays ++ weekdayabbrevs)
|
show wday <> " in " <> show (weekdays ++ weekdayabbrevs)
|
||||||
|
|
||||||
today,yesterday,tomorrow :: TextParser m SmartDate
|
today,yesterday,tomorrow :: TextParser m SmartDate
|
||||||
|
|||||||
@ -100,10 +100,10 @@ module Hledger.Read.Common (
|
|||||||
where
|
where
|
||||||
--- * imports
|
--- * imports
|
||||||
import Prelude ()
|
import Prelude ()
|
||||||
import "base-compat-batteries" Prelude.Compat hiding (readFile)
|
import "base-compat-batteries" Prelude.Compat hiding (fail, readFile)
|
||||||
import "base-compat-batteries" Control.Monad.Compat
|
import qualified "base-compat-batteries" Control.Monad.Fail.Compat as Fail (fail)
|
||||||
import Control.Monad.Except (ExceptT(..), runExceptT, throwError)
|
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.Bifunctor (bimap, second)
|
||||||
import Data.Char
|
import Data.Char
|
||||||
import Data.Data
|
import Data.Data
|
||||||
@ -781,7 +781,7 @@ numberp suggestedStyle = label "number" $ do
|
|||||||
dbg8 "numberp suggestedStyle" suggestedStyle `seq` return ()
|
dbg8 "numberp suggestedStyle" suggestedStyle `seq` return ()
|
||||||
case dbg8 "numberp quantity,precision,mdecimalpoint,mgrps"
|
case dbg8 "numberp quantity,precision,mdecimalpoint,mgrps"
|
||||||
$ fromRawNumber rawNum mExp of
|
$ fromRawNumber rawNum mExp of
|
||||||
Left errMsg -> fail errMsg
|
Left errMsg -> Fail.fail errMsg
|
||||||
Right (q, p, d, g) -> pure (sign q, p, d, g)
|
Right (q, p, d, g) -> pure (sign q, p, d, g)
|
||||||
|
|
||||||
exponentp :: TextParser m Int
|
exponentp :: TextParser m Int
|
||||||
@ -883,7 +883,7 @@ rawnumberp = label "number" $ do
|
|||||||
-- Guard against mistyped numbers
|
-- Guard against mistyped numbers
|
||||||
mExtraDecimalSep <- optional $ lookAhead $ satisfy isDecimalPointChar
|
mExtraDecimalSep <- optional $ lookAhead $ satisfy isDecimalPointChar
|
||||||
when (isJust mExtraDecimalSep) $
|
when (isJust mExtraDecimalSep) $
|
||||||
fail "invalid number (invalid use of separator)"
|
Fail.fail "invalid number (invalid use of separator)"
|
||||||
|
|
||||||
mExtraFragment <- optional $ lookAhead $ try $
|
mExtraFragment <- optional $ lookAhead $ try $
|
||||||
char ' ' *> getOffset <* digitChar
|
char ' ' *> getOffset <* digitChar
|
||||||
@ -1273,7 +1273,7 @@ bracketeddatetagsp mYear1 = do
|
|||||||
$ between (char '[') (char ']')
|
$ between (char '[') (char ']')
|
||||||
$ takeWhile1P Nothing isBracketedDateChar
|
$ takeWhile1P Nothing isBracketedDateChar
|
||||||
unless (T.any isDigit s && T.any isDateSepChar s) $
|
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
|
-- Looks sufficiently like a bracketed date to commit to parsing a date
|
||||||
|
|
||||||
between (char '[') (char ']') $ do
|
between (char '[') (char ']') $ do
|
||||||
|
|||||||
@ -31,7 +31,8 @@ module Hledger.Read.CsvReader (
|
|||||||
)
|
)
|
||||||
where
|
where
|
||||||
import Prelude ()
|
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.Exception hiding (try)
|
||||||
import Control.Monad
|
import Control.Monad
|
||||||
import Control.Monad.Except
|
import Control.Monad.Except
|
||||||
@ -599,7 +600,7 @@ conditionalblockp = do
|
|||||||
ms <- some recordmatcherp
|
ms <- some recordmatcherp
|
||||||
as <- many (lift (skipSome spacenonewline) >> fieldassignmentp)
|
as <- many (lift (skipSome spacenonewline) >> fieldassignmentp)
|
||||||
when (null as) $
|
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)
|
return (ms, as)
|
||||||
<?> "conditional block"
|
<?> "conditional block"
|
||||||
|
|
||||||
@ -610,7 +611,7 @@ recordmatcherp = do
|
|||||||
_ <- optional (matchoperatorp >> lift (skipMany spacenonewline) >> optional newline)
|
_ <- optional (matchoperatorp >> lift (skipMany spacenonewline) >> optional newline)
|
||||||
ps <- patternsp
|
ps <- patternsp
|
||||||
when (null ps) $
|
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
|
return ps
|
||||||
<?> "record matcher"
|
<?> "record matcher"
|
||||||
|
|
||||||
|
|||||||
@ -63,12 +63,15 @@ module Hledger.Read.JournalReader (
|
|||||||
)
|
)
|
||||||
where
|
where
|
||||||
--- * imports
|
--- * imports
|
||||||
import Prelude ()
|
import qualified Prelude (fail)
|
||||||
import "base-compat-batteries" Prelude.Compat hiding (readFile)
|
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 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.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 qualified Data.Map.Strict as M
|
||||||
import Data.Text (Text)
|
import Data.Text (Text)
|
||||||
import Data.String
|
import Data.String
|
||||||
@ -215,7 +218,7 @@ includedirectivep = do
|
|||||||
|
|
||||||
let parentfilestack = jincludefilestack parentj
|
let parentfilestack = jincludefilestack parentj
|
||||||
when (filepath `elem` parentfilestack) $
|
when (filepath `elem` parentfilestack) $
|
||||||
fail ("Cyclic include: " ++ filepath)
|
Fail.fail ("Cyclic include: " ++ filepath)
|
||||||
|
|
||||||
childInput <- lift $ readFilePortably filepath
|
childInput <- lift $ readFilePortably filepath
|
||||||
`orRethrowIOError` (show parentpos ++ " reading " ++ 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)
|
eResult <- liftIO $ (Right <$> io) `C.catch` \(e::C.IOException) -> pure $ Left $ printf "%s:\n%s" msg (show e)
|
||||||
case eResult of
|
case eResult of
|
||||||
Right res -> pure res
|
Right res -> pure res
|
||||||
Left errMsg -> fail errMsg
|
Left errMsg -> Fail.fail errMsg
|
||||||
|
|
||||||
-- Parse an account directive, adding its info to the journal's
|
-- Parse an account directive, adding its info to the journal's
|
||||||
-- list of account declarations.
|
-- list of account declarations.
|
||||||
@ -682,7 +685,7 @@ tests_JournalReader = tests "JournalReader" [
|
|||||||
test "yearless date with default year" $ do
|
test "yearless date with default year" $ do
|
||||||
let s = "1/1"
|
let s = "1/1"
|
||||||
ep <- parseWithState mempty{jparsedefaultyear=Just 2018} datep s
|
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 "no leading zero" $ expectParse datep "2018/1/1"
|
||||||
|
|
||||||
,test "datetimep" $ do
|
,test "datetimep" $ do
|
||||||
|
|||||||
@ -4,7 +4,7 @@ cabal-version: 1.12
|
|||||||
--
|
--
|
||||||
-- see: https://github.com/sol/hpack
|
-- see: https://github.com/sol/hpack
|
||||||
--
|
--
|
||||||
-- hash: 567ed725b211714a0f6db5e17a68d670789c7e603020b42d6b8f18e7af5ceb63
|
-- hash: c4535c00ecf88919b278f19cdd8f72caf2212d43fb3dc6ee21299451ee977ea0
|
||||||
|
|
||||||
name: hledger-lib
|
name: hledger-lib
|
||||||
version: 1.15.2
|
version: 1.15.2
|
||||||
@ -108,7 +108,7 @@ library
|
|||||||
, ansi-terminal >=0.6.2.3
|
, ansi-terminal >=0.6.2.3
|
||||||
, array
|
, array
|
||||||
, base >=4.8 && <4.13
|
, 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
|
, blaze-markup >=0.5.1
|
||||||
, bytestring
|
, bytestring
|
||||||
, call-stack
|
, call-stack
|
||||||
@ -211,7 +211,7 @@ test-suite doctests
|
|||||||
, ansi-terminal >=0.6.2.3
|
, ansi-terminal >=0.6.2.3
|
||||||
, array
|
, array
|
||||||
, base >=4.8 && <4.13
|
, 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
|
, blaze-markup >=0.5.1
|
||||||
, bytestring
|
, bytestring
|
||||||
, call-stack
|
, call-stack
|
||||||
@ -317,7 +317,7 @@ test-suite easytests
|
|||||||
, ansi-terminal >=0.6.2.3
|
, ansi-terminal >=0.6.2.3
|
||||||
, array
|
, array
|
||||||
, base >=4.8 && <4.13
|
, 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
|
, blaze-markup >=0.5.1
|
||||||
, bytestring
|
, bytestring
|
||||||
, call-stack
|
, call-stack
|
||||||
|
|||||||
@ -40,7 +40,7 @@ extra-source-files:
|
|||||||
|
|
||||||
dependencies:
|
dependencies:
|
||||||
- base >=4.8 && <4.13
|
- 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
|
- ansi-terminal >=0.6.2.3
|
||||||
- array
|
- array
|
||||||
- blaze-markup >=0.5.1
|
- blaze-markup >=0.5.1
|
||||||
|
|||||||
@ -4,7 +4,7 @@ cabal-version: 1.12
|
|||||||
--
|
--
|
||||||
-- see: https://github.com/sol/hpack
|
-- see: https://github.com/sol/hpack
|
||||||
--
|
--
|
||||||
-- hash: 0deef0df7a1a0ef153ebf7e31ddd57882a2671941a0f801bc2980dae7080501f
|
-- hash: b157e8031b886cdba4226a4710189f672b05418f5bb4889477f6b3b6369c6f4d
|
||||||
|
|
||||||
name: hledger-ui
|
name: hledger-ui
|
||||||
version: 1.15
|
version: 1.15
|
||||||
@ -69,7 +69,7 @@ executable hledger-ui
|
|||||||
ansi-terminal >=0.6.2.3
|
ansi-terminal >=0.6.2.3
|
||||||
, async
|
, async
|
||||||
, base >=4.8 && <4.13
|
, base >=4.8 && <4.13
|
||||||
, base-compat-batteries >=0.10.1 && <0.11
|
, base-compat-batteries >=0.10.1 && <0.12
|
||||||
, cmdargs >=0.8
|
, cmdargs >=0.8
|
||||||
, containers
|
, containers
|
||||||
, data-default
|
, data-default
|
||||||
|
|||||||
@ -45,7 +45,7 @@ dependencies:
|
|||||||
- ansi-terminal >=0.6.2.3
|
- ansi-terminal >=0.6.2.3
|
||||||
- async
|
- async
|
||||||
- base >=4.8 && <4.13
|
- base >=4.8 && <4.13
|
||||||
- base-compat-batteries >=0.10.1 && <0.11
|
- base-compat-batteries >=0.10.1 && <0.12
|
||||||
- cmdargs >=0.8
|
- cmdargs >=0.8
|
||||||
- containers
|
- containers
|
||||||
- data-default
|
- data-default
|
||||||
|
|||||||
@ -16,9 +16,9 @@ module Hledger.Cli.Commands.Add (
|
|||||||
where
|
where
|
||||||
|
|
||||||
import Prelude ()
|
import Prelude ()
|
||||||
import "base-compat-batteries" Prelude.Compat
|
import "base-compat-batteries" Prelude.Compat hiding (fail)
|
||||||
import Control.Exception as E
|
import Control.Exception as E
|
||||||
import Control.Monad
|
import Control.Monad (when)
|
||||||
import Control.Monad.Trans.Class
|
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)
|
||||||
@ -118,7 +118,7 @@ getAndAddTransactions :: EntryState -> IO ()
|
|||||||
getAndAddTransactions es@EntryState{..} = (do
|
getAndAddTransactions es@EntryState{..} = (do
|
||||||
mt <- runInputT (setComplete noCompletion defaultSettings) (System.Console.Wizard.run $ haskeline $ confirmedTransactionWizard es)
|
mt <- runInputT (setComplete noCompletion defaultSettings) (System.Console.Wizard.run $ haskeline $ confirmedTransactionWizard es)
|
||||||
case mt of
|
case mt of
|
||||||
Nothing -> fail "urk ?"
|
Nothing -> error "Could not interpret the input, restarting" -- caught below causing a restart, I believe
|
||||||
Just t -> do
|
Just t -> do
|
||||||
j <- if debug_ esOpts > 0
|
j <- if debug_ esOpts > 0
|
||||||
then do hPrintf stderr "Skipping journal add due to debug mode.\n"
|
then do hPrintf stderr "Skipping journal add due to debug mode.\n"
|
||||||
|
|||||||
@ -4,7 +4,7 @@ cabal-version: 1.12
|
|||||||
--
|
--
|
||||||
-- see: https://github.com/sol/hpack
|
-- see: https://github.com/sol/hpack
|
||||||
--
|
--
|
||||||
-- hash: f839c60877b230c5cb9cffe709ab8f7f6d770f16c15c68c25b3aed3cc0c65bb0
|
-- hash: f7a17b233540faa8cabd06b8cdac862fff8b1c1dfcaa46d74467bff5a0f1853b
|
||||||
|
|
||||||
name: hledger
|
name: hledger
|
||||||
version: 1.15.2
|
version: 1.15.2
|
||||||
@ -152,7 +152,7 @@ library
|
|||||||
, Diff
|
, Diff
|
||||||
, ansi-terminal >=0.6.2.3
|
, ansi-terminal >=0.6.2.3
|
||||||
, base >=4.8 && <4.13
|
, base >=4.8 && <4.13
|
||||||
, base-compat-batteries >=0.10.1 && <0.11
|
, base-compat-batteries >=0.10.1 && <0.12
|
||||||
, bytestring
|
, bytestring
|
||||||
, cmdargs >=0.10
|
, cmdargs >=0.10
|
||||||
, containers
|
, containers
|
||||||
@ -204,7 +204,7 @@ executable hledger
|
|||||||
Decimal
|
Decimal
|
||||||
, ansi-terminal >=0.6.2.3
|
, ansi-terminal >=0.6.2.3
|
||||||
, base >=4.8 && <4.13
|
, base >=4.8 && <4.13
|
||||||
, base-compat-batteries >=0.10.1 && <0.11
|
, base-compat-batteries >=0.10.1 && <0.12
|
||||||
, bytestring
|
, bytestring
|
||||||
, cmdargs >=0.10
|
, cmdargs >=0.10
|
||||||
, containers
|
, containers
|
||||||
@ -258,7 +258,7 @@ test-suite test
|
|||||||
Decimal
|
Decimal
|
||||||
, ansi-terminal >=0.6.2.3
|
, ansi-terminal >=0.6.2.3
|
||||||
, base >=4.8 && <4.13
|
, base >=4.8 && <4.13
|
||||||
, base-compat-batteries >=0.10.1 && <0.11
|
, base-compat-batteries >=0.10.1 && <0.12
|
||||||
, bytestring
|
, bytestring
|
||||||
, cmdargs >=0.10
|
, cmdargs >=0.10
|
||||||
, containers
|
, containers
|
||||||
@ -311,7 +311,7 @@ benchmark bench
|
|||||||
Decimal
|
Decimal
|
||||||
, ansi-terminal >=0.6.2.3
|
, ansi-terminal >=0.6.2.3
|
||||||
, base >=4.8 && <4.13
|
, base >=4.8 && <4.13
|
||||||
, base-compat-batteries >=0.10.1 && <0.11
|
, base-compat-batteries >=0.10.1 && <0.12
|
||||||
, bytestring
|
, bytestring
|
||||||
, cmdargs >=0.10
|
, cmdargs >=0.10
|
||||||
, containers
|
, containers
|
||||||
|
|||||||
@ -111,7 +111,7 @@ dependencies:
|
|||||||
- hledger-lib >=1.15.2 && <1.16
|
- hledger-lib >=1.15.2 && <1.16
|
||||||
- ansi-terminal >=0.6.2.3
|
- ansi-terminal >=0.6.2.3
|
||||||
- base >=4.8 && <4.13
|
- base >=4.8 && <4.13
|
||||||
- base-compat-batteries >=0.10.1 && <0.11
|
- base-compat-batteries >=0.10.1 && <0.12
|
||||||
- bytestring
|
- bytestring
|
||||||
- cmdargs >=0.10
|
- cmdargs >=0.10
|
||||||
- containers
|
- containers
|
||||||
|
|||||||
@ -18,6 +18,9 @@ nix:
|
|||||||
|
|
||||||
extra-deps:
|
extra-deps:
|
||||||
# for hledger-lib:
|
# for hledger-lib:
|
||||||
|
# testing:
|
||||||
|
# - base-compat-batteries-0.11.0
|
||||||
|
# - base-compat-0.11.0
|
||||||
# for hledger:
|
# for hledger:
|
||||||
# for hledger-ui:
|
# for hledger-ui:
|
||||||
# for hledger-web:
|
# for hledger-web:
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user