penny 0.32.0.6 → 0.32.0.8
raw patch · 24 files changed
+348/−292 lines, 24 filesdep +contravariantdep +rainboxdep ~QuickCheckdep ~action-permutationsdep ~anonymous-sums
Dependencies added: contravariant, rainbox
Dependency ranges changed: QuickCheck, action-permutations, anonymous-sums, base, bytestring, cereal, containers, either, matchers, multiarg, ofx, old-locale, parsec, penny, prednote, pretty-show, rainbow, random, random-shuffle, semigroups, split, text, time, transformers
Files
- changelog +3/−0
- current-versions.txt +27/−15
- lib/Penny/Cabin/Balance/Convert/Chunker.hs +5/−4
- lib/Penny/Cabin/Balance/Convert/ChunkerPct.hs +4/−4
- lib/Penny/Cabin/Balance/MultiCommodity/Chunker.hs +2/−2
- lib/Penny/Cabin/Interface.hs +2/−2
- lib/Penny/Cabin/Posts.hs +14/−15
- lib/Penny/Cabin/Posts/Allocated.hs +2/−0
- lib/Penny/Cabin/Posts/BottomRows.hs +3/−3
- lib/Penny/Cabin/Posts/Growers.hs +3/−3
- lib/Penny/Cabin/Posts/Meta.hs +3/−3
- lib/Penny/Cabin/Posts/Parser.hs +3/−2
- lib/Penny/Cabin/Row.hs +3/−3
- lib/Penny/Cabin/Scheme.hs +2/−2
- lib/Penny/Liberty.hs +10/−10
- lib/Penny/Lincoln/Matchers.hs +3/−2
- lib/Penny/Lincoln/Predicates.hs +36/−33
- lib/Penny/Lincoln/Predicates/Siblings.hs +36/−33
- lib/Penny/Wheat.hs +22/−23
- lib/Penny/Zinc.hs +5/−5
- minimum-versions.txt +23/−13
- penny.cabal +63/−51
- penny.cabal.m4 +49/−37
- versions.m4 +25/−27
+ changelog view
@@ -0,0 +1,3 @@+0.32.0.8++ * update versions of depended-upon packages
current-versions.txt view
@@ -1,7 +1,7 @@ This package was tested to work with these dependency versions and compiler version. These are the default versions fetched by cabal install.-Tested as of: 2014-03-08 16:59:06.573315 UTC+Tested as of: 2014-04-16 17:16:55.729949 UTC Path to compiler: ghc-7.6.3 Compiler description: 7.6.3 @@ -32,40 +32,52 @@ time-1.4.0.1 unix-2.6.0.1 -/home/massysett/penny/sunlight-15431/db:+/home/massysett/penny/sunlight-10948/db: MonadRandom-0.1.13 QuickCheck-2.6- action-permutations-0.0.0.0+ action-permutations-0.0.0.1 anonymous-sums-0.4.0.0+ ansi-terminal-0.6.1.1+ ansi-wl-pprint-0.6.7.1+ async-2.0.1.5 base-unicode-symbols-0.2.2.4+ bifunctors-4.1.1 cereal-0.4.0.1- comonad-4.0+ comonad-4.0.1 contravariant-0.4.4- distributive-0.4+ distributive-0.4.3.1 either-4.1.1 hashable-1.2.1.0 haskell-lexer-1.0- matchers-0.14.0.2+ matchers-0.18.0.0 monad-control-0.3.2.3- mtl-2.1.2- multiarg-0.24.0.4+ mtl-2.1.3.1+ multiarg-0.26.0.0 nats-0.1.2 ofx-0.4.0.2+ optparse-applicative-0.8.0.1 parsec-3.1.5- penny-0.32.0.6- prednote-0.18.0.4+ penny-0.32.0.8+ prednote-0.22.0.2 pretty-show-1.6.7- rainbow-0.12.0.0+ rainbow-0.14.0.0+ rainbox-0.4.0.2 random-1.0.1.1 random-shuffle-0.0.4- semigroupoids-4.0- semigroups-0.12.2+ regex-base-0.93.2+ regex-tdfa-1.2.0+ semigroupoids-4.0.1+ semigroups-0.13.0.1 split-0.2.2- tagged-0.7+ stm-2.4.3+ tagged-0.7.1+ tasty-0.8.0.4+ tasty-quickcheck-0.8 terminfo-0.4.0.0 text-1.1.0.1 transformers-0.3.0.0 transformers-base-0.4.1 transformers-compat-0.1.1.1- unordered-containers-0.2.3.3+ unbounded-delays-0.1.0.7+ unordered-containers-0.2.4.0
lib/Penny/Cabin/Balance/Convert/Chunker.hs view
@@ -60,7 +60,7 @@ -> Columns PreSpec -> Columns R.Width maxWidthPerColumn w p = f <$> w <*> p where- f old new = max old (R.Width . X.length . Rb.text . bits $ new)+ f old new = max old (R.Width . sum . map X.length . Rb.text . bits $ new) -- | Changes a single set of Columns to a set of ColumnSpec of the -- given width.@@ -193,7 +193,8 @@ eo = E.fromVisibleNum vn lbl = E.Other ca = PreSpec R.LeftJustify (lbl, eo)- (E.getEvenOddLabelValue lbl eo chgrs . Rb.Chunk mempty $ txt)+ (E.getEvenOddLabelValue lbl eo chgrs . Rb.Chunk mempty . (:[])+ $ txt) cd = PreSpec R.LeftJustify (lbl, eo) (E.getEvenOddLabelValue lbl eo chgrs mempty) cq = cd@@ -208,7 +209,7 @@ applyFmt = E.getEvenOddLabelValue lbl eo chgrs eo = E.fromVisibleNum vn lbl = E.Other- ca = PreSpec R.LeftJustify (lbl, eo) (applyFmt (Rb.Chunk mempty txt))+ ca = PreSpec R.LeftJustify (lbl, eo) (applyFmt (Rb.Chunk mempty [txt])) where txt = X.append indents acctTxt indents = X.replicate (indentAmount * max 0 i)@@ -232,7 +233,7 @@ L.Zero -> Nothing L.NonZero c -> Just $ L.colDrCr c qtFmt = E.getEvenOddLabelValue lbl eo chgrs- chkQt = qtFmt $ Rb.Chunk mempty t+ chkQt = qtFmt $ Rb.Chunk mempty [t] (lbl, t) = case bl of L.Zero -> (E.Zero, X.pack "--") L.NonZero (L.Column dc qt) -> (E.dcToLbl dc, fmt qt)
lib/Penny/Cabin/Balance/Convert/ChunkerPct.hs view
@@ -61,7 +61,7 @@ -> Columns PreSpec -> Columns R.Width maxWidthPerColumn w p = f <$> w <*> p where- f old new = max old (R.Width . X.length . Rb.text . bits $ new)+ f old new = max old (R.Width . sum . map X.length . Rb.text . bits $ new) -- | Changes a single set of Columns to a set of ColumnSpec of the -- given width.@@ -206,7 +206,7 @@ eo = E.fromVisibleNum vn lbl = E.Other ca = PreSpec R.LeftJustify (lbl, eo)- (E.getEvenOddLabelValue lbl eo chgrs . Rb.Chunk mempty $ txt)+ (E.getEvenOddLabelValue lbl eo chgrs . Rb.Chunk mempty $ [txt]) cd = PreSpec R.LeftJustify (lbl, eo) (E.getEvenOddLabelValue lbl eo chgrs mempty) cq = cd@@ -221,7 +221,7 @@ applyFmt = E.getEvenOddLabelValue lbl eo chgrs eo = E.fromVisibleNum vn lbl = E.Other- ca = PreSpec R.LeftJustify (lbl, eo) (applyFmt (Rb.Chunk mempty txt))+ ca = PreSpec R.LeftJustify (lbl, eo) (applyFmt (Rb.Chunk mempty [txt])) where txt = X.append indents acctTxt indents = X.replicate (indentAmount * max 0 i)@@ -242,7 +242,7 @@ eo = E.fromVisibleNum vn chkDc = E.bottomLineToDrCr (fmap pctDrCr pct) eo chgrs qtFmt = E.getEvenOddLabelValue lbl eo chgrs- chkQt = qtFmt $ Rb.Chunk mempty t+ chkQt = qtFmt $ Rb.Chunk mempty [t] (lbl, t) = case pct of Nothing -> (E.Zero, X.pack "--") Just (Percent dc qt) ->
lib/Penny/Cabin/Balance/MultiCommodity/Chunker.hs view
@@ -63,7 +63,7 @@ -> Columns R.Width maxWidthPerColumn w p = f <$> w <*> p where f old new = max old ( safeMaximum (R.Width 0)- . map (R.Width . X.length . Rb.text)+ . map (R.Width . sum . map X.length . Rb.text) . bits $ new) safeMaximum d ls = if null ls then d else maximum ls @@ -179,7 +179,7 @@ lbl = E.Other eo = E.fromVisibleNum vn applyFmt = E.getEvenOddLabelValue lbl eo chgrs- ca = PreSpec R.LeftJustify (lbl, eo) [applyFmt $ Rb.Chunk mempty txt]+ ca = PreSpec R.LeftJustify (lbl, eo) [applyFmt $ Rb.Chunk mempty [txt]] where txt = X.append indents acctTxt indents = X.replicate (indentAmount * max 0 i)
lib/Penny/Cabin/Interface.hs view
@@ -4,9 +4,9 @@ import qualified Data.Prednote.Expressions as Exp import qualified Penny.Cabin.Scheme as S+import qualified Data.Prednote as Pd import qualified Data.Text as X import Text.Matchers (CaseSensitive)-import qualified Text.Matchers as TM import qualified System.Console.MultiArg as MA import qualified System.Console.Rainbow as R @@ -64,7 +64,7 @@ -- case sensitivity (this may have been changed in the filtering -- options) - -> (CaseSensitive -> X.Text -> Either X.Text TM.Matcher)+ -> (CaseSensitive -> X.Text -> Either X.Text (Pd.Predbox X.Text)) -- ^ Result from previous parsers indicating the matcher factory the -- user wishes to use
lib/Penny/Cabin/Posts.hs view
@@ -71,8 +71,7 @@ import qualified Penny.Lincoln.Queries as Q import qualified Penny.Liberty as Ly import qualified Penny.Shield as Sh-import qualified Data.Prednote.Expressions as Exp-import qualified Data.Prednote.Pdct as Pe+import qualified Data.Prednote as Pd import qualified System.Console.Rainbow as Rb import Data.List (intersperse)@@ -88,7 +87,7 @@ postsReport :: E.Changers -> CO.ShowZeroBalances- -> (Pe.Pdct (Ly.LibertyMeta, L.Posting))+ -> (Pd.Predbox (Ly.LibertyMeta, L.Posting)) -- ^ Removes posts from the report if applying this function to the -- post returns False. Posts removed still affect the running -- balance.@@ -129,7 +128,7 @@ -> CaseSensitive -> L.Factory -> E.Changers- -> Exp.ExprDesc+ -> Pd.ExprDesc -> ([L.Transaction] -> [(Ly.LibertyMeta, L.Posting)]) -> [Either String (P.State -> Either X.Text P.State)] -> Either X.Text I.ArgsAndReport@@ -161,7 +160,7 @@ ++ rptChks return chks -indentAmt :: Pe.IndentAmt+indentAmt :: Pd.IndentAmt indentAmt = 4 blankLine :: Rb.Chunk@@ -169,18 +168,18 @@ showExpression :: P.ShowExpression- -> Pe.Pdct ((Ly.LibertyMeta, L.Posting))+ -> Pd.Predbox ((Ly.LibertyMeta, L.Posting)) -> [Rb.Chunk] showExpression (P.ShowExpression b) pdct = if not b then [] else info : blankLine : (chks ++ [blankLine]) where info = "Postings filter expression:\n"- chks = Pe.showPdct indentAmt 0 pdct+ chks = Pd.showPredbox indentAmt 0 pdct showVerboseFilter :: (L.Amount L.Qty -> X.Text) -> P.VerboseFilter- -> Pe.Pdct (Ly.LibertyMeta, L.Posting)+ -> Pd.Predbox (Ly.LibertyMeta, L.Posting) -> [(Ly.LibertyMeta, L.Posting)] -> [Rb.Chunk] showVerboseFilter fmt (P.VerboseFilter b) pdct bs =@@ -188,7 +187,7 @@ where chks = fst- $ Pe.verboseFilter ((L.display fmt) . snd) indentAmt False pdct bs+ $ Pd.verboseFilter ((L.display fmt) . snd) indentAmt False pdct bs info = "Postings report filter:\n" defaultOptions@@ -209,13 +208,13 @@ type Error = X.Text getPredicate- :: Exp.ExprDesc- -> [Exp.Token ((Ly.LibertyMeta, L.Posting))]- -> Either Error (Pe.Pdct ((Ly.LibertyMeta, L.Posting)))+ :: Pd.ExprDesc+ -> [Pd.Token ((Ly.LibertyMeta, L.Posting))]+ -> Either Error (Pd.Predbox ((Ly.LibertyMeta, L.Posting))) getPredicate d ts = case ts of- [] -> return $ Pe.always- _ -> Exp.parseExpression d ts+ [] -> return $ Pd.always+ _ -> Pd.parseExpression d ts -- | All the information to configure the postings report if the@@ -281,7 +280,7 @@ newParseState :: CaseSensitive -> L.Factory- -> Exp.ExprDesc+ -> Pd.ExprDesc -> ZincOpts -> P.State newParseState cs fty expr o = P.State
lib/Penny/Cabin/Posts/Allocated.hs view
@@ -342,6 +342,7 @@ toBit (TF.Words seqTxts) = md . Rb.Chunk mempty+ . (:[]) . X.unwords . Fdbl.toList $ seqTxts@@ -376,6 +377,7 @@ (TF.Words shortened) = TF.shorten shortest target ws sq = [ md . Rb.Chunk mempty+ . (:[]) . X.concat . intersperse (X.singleton ':') . Fdbl.toList
lib/Penny/Cabin/Posts/BottomRows.hs view
@@ -329,7 +329,7 @@ . snd $ info md = E.getEvenOddLabelValue E.Other eo ch- toBit (TF.Words ws) = md . Rb.Chunk mempty $ t where+ toBit (TF.Words ws) = md . Rb.Chunk mempty . (:[]) $ t where t = X.concat . intersperse (X.singleton ' ') . Fdbl.toList $ ws @@ -347,7 +347,7 @@ . L.unMemo $ m md = E.getEvenOddLabelValue lbl eo ch- toBit (TF.Words ws) = md . Rb.Chunk mempty+ toBit (TF.Words ws) = md . Rb.Chunk mempty . (:[]) $ (X.unwords . Fdbl.toList $ ws) @@ -377,7 +377,7 @@ ts = (E.Other, eo) cell = R.ColumnSpec R.LeftJustify w ts cs md = E.getEvenOddLabelValue E.Other eo ch- toBit n = md . Rb.Chunk mempty+ toBit n = md . Rb.Chunk mempty . (:[]) . X.drop (max 0 (X.length n - width)) $ n cs = case Q.filename . snd $ info of Nothing -> []
lib/Penny/Cabin/Posts/Growers.hs view
@@ -63,7 +63,7 @@ widestLine (PreSpec _ _ bs) = case bs of [] -> 0- xs -> maximum . map (X.length . Rb.text) $ xs+ xs -> maximum . map (sum . map X.length . Rb.text) $ xs data PreSpec = PreSpec { _justification :: R.Justification@@ -83,7 +83,7 @@ let eo = E.fromVisibleNum . M.visibleNum . fst $ b j = R.LeftJustify md = E.getEvenOddLabelValue lbl eo chgrs- ck = [md $ Rb.Chunk mempty t]+ ck = [md $ Rb.Chunk mempty [t]] in PreSpec j (lbl, eo) ck @@ -234,7 +234,7 @@ L.Credit -> E.Credit eo = E.fromVisibleNum . M.visibleNum . fst $ i md = E.getEvenOddLabelValue lbl eo chgrs- bit = md $ Rb.Chunk mempty t+ bit = md $ Rb.Chunk mempty [t] getPostingDrCr :: E.Changers -> (M.PostMeta, L.Posting) -> PreSpec
lib/Penny/Cabin/Posts/Meta.hs view
@@ -11,7 +11,7 @@ import qualified Penny.Liberty as Ly import qualified Penny.Cabin.Meta as M import qualified Penny.Cabin.Options as CO-import qualified Data.Prednote.Pdct as Pe+import qualified Data.Prednote as Pe import Data.Monoid (mempty, mappend) data PostMeta = PostMeta@@ -43,7 +43,7 @@ -- the VisibleNum. toBoxList :: CO.ShowZeroBalances- -> Pe.Pdct (Ly.LibertyMeta, L.Posting)+ -> Pe.Predbox (Ly.LibertyMeta, L.Posting) -- ^ Removes posts from the report if applying this function to the -- post returns a value other than Just True. Posts removed still -- affect the running balance.@@ -58,7 +58,7 @@ toBoxList szb pdct pff = addMetadata . Ly.processPostFilters pff- . filter (Pe.rBool . flip Pe.evaluate pdct . snd)+ . filter (Pe.rBool . Pe.evaluate pdct . snd) . addBalances szb addBalances
lib/Penny/Cabin/Posts/Parser.hs view
@@ -11,6 +11,7 @@ import Control.Applicative ((<$>), pure, (<*>), Applicative) import Data.Char (toLower)+import Data.Functor.Contravariant (contramap) import qualified Data.Foldable as Fdbl import Data.Monoid ((<>)) import Data.Text (Text)@@ -24,7 +25,7 @@ import qualified Penny.Cabin.Options as CO import qualified Penny.Liberty as Ly import qualified Data.Prednote.Expressions as Exp-import qualified Data.Prednote.Pdct as Pt+import qualified Data.Prednote as Pt import qualified Penny.Lincoln as L import qualified Penny.Shield as S import qualified Text.Matchers as M@@ -82,7 +83,7 @@ let cs = sensitive st fty = factory st g <- lyFn cs fty- let g' = Pt.boxPdct snd g+ let g' = contramap snd g ts' = tokens st ++ [Exp.operand g'] return $ st { tokens = ts' }
lib/Penny/Cabin/Row.hs view
@@ -77,8 +77,8 @@ -> JustifiedCell justify (Width w) j l eo chgrs pc = JustifiedCell (left, right) where- origWidth = X.length . R.text $ pc- pad = E.getEvenOddLabelValue l eo chgrs . R.Chunk mempty $ t+ origWidth = sum . map X.length . R.text $ pc+ pad = E.getEvenOddLabelValue l eo chgrs . R.Chunk mempty $ [t] t = X.replicate (max 0 (w - origWidth)) (X.singleton ' ') (left, right) = case j of LeftJustify -> (pc, pad)@@ -116,7 +116,7 @@ toPaddedColumn (JustifiedColumn cs (Width w) (lbl, eo)) = let l = length cs nPads = max 0 $ h - l- pad = E.getEvenOddLabelValue lbl eo chgrs . R.Chunk mempty $ t+ pad = E.getEvenOddLabelValue lbl eo chgrs . R.Chunk mempty $ [t] t = X.replicate w (X.singleton ' ') pads = replicate nPads $ JustifiedCell (mempty, pad) in cs ++ pads
lib/Penny/Cabin/Scheme.hs view
@@ -107,7 +107,7 @@ -> R.Chunk bottomLineToCmdty chgrs eo (cy, bl) = md c where- c = R.Chunk mempty . L.unCommodity $ cy+ c = R.Chunk mempty . (:[]) . L.unCommodity $ cy lbl = case bl of L.Zero -> Zero L.NonZero (L.Column clmDrCr _) -> dcToLbl clmDrCr@@ -132,7 +132,7 @@ -> EvenOdd -> (L.Commodity, L.BottomLine) -> R.Chunk-bottomLineToQty chgrs getTxt eo (cy, bl) = md (R.Chunk mempty t)+bottomLineToQty chgrs getTxt eo (cy, bl) = md (R.Chunk mempty [t]) where (lbl, t) = case bl of L.Zero -> (Zero, X.pack "--")
lib/Penny/Liberty.hs view
@@ -70,7 +70,7 @@ import qualified Penny.Lincoln.Predicates as P import qualified Penny.Lincoln.Queries as Q import qualified Penny.Lincoln.Predicates.Siblings as PS-import qualified Data.Prednote.Pdct as E+import qualified Data.Prednote as E import qualified Penny.Lincoln as L import qualified System.Console.Rainbow as C import qualified Data.Prednote.Expressions as X@@ -110,7 +110,7 @@ parsePredicate :: X.ExprDesc -> [X.Token a]- -> Either Error (E.Pdct a)+ -> Either Error (E.Predbox a) parsePredicate d ls = case ls of [] -> return E.always _ -> X.parseExpression d ls@@ -178,7 +178,7 @@ type MatcherFactory = CaseSensitive -> Text- -> Either Text TM.Matcher+ -> Either Text (E.Predbox Text) newtype ListLength = ListLength { unListLength :: Int } deriving (Eq, Ord, Show)@@ -212,7 +212,7 @@ :: String -> CaseSensitive -> MatcherFactory- -> Either Error TM.Matcher+ -> Either Error (E.Predbox Text) getMatcher s cs f = either (Left . mkError) Right@@ -226,8 +226,8 @@ -- the string given is invalid. parseComparer :: String- -> (Ordering -> E.Pdct a)- -> Either InputError (E.Pdct a)+ -> (Ordering -> E.Predbox a)+ -> Either InputError (E.Predbox a) parseComparer s f = maybe (Left . MA.ErrorMsg $ "bad comparer") Right $ E.parseComparer (pack s) f@@ -243,7 +243,7 @@ where err msg = MA.ErrorMsg $ "bad date - " <> show msg -type Operand = E.Pdct L.Posting+type Operand = E.Predbox L.Posting -- | OptSpec for a date. date :: OptSpec Operand@@ -286,7 +286,7 @@ -> Maybe Char -- ^ Short option, if included - -> (TM.Matcher -> P.LPdct)+ -> (E.Predbox Text -> P.LPdct) -- ^ When applied to a Matcher, this function returns a predicate. -> OptSpec ( CaseSensitive@@ -423,10 +423,10 @@ :: String -- ^ Name of the command line option, such as @global-posting@ - -> (Int -> Ordering -> E.Pdct L.Posting)+ -> (Int -> Ordering -> E.Predbox L.Posting) -- ^ Function that returns a Pdct for forward serial - -> (Int -> Ordering -> E.Pdct L.Posting)+ -> (Int -> Ordering -> E.Predbox L.Posting) -- ^ Function that returns a Pdct for reverse serial -> ( OptSpec Operand
lib/Penny/Lincoln/Matchers.hs view
@@ -4,6 +4,7 @@ import qualified Data.Text as X import qualified Text.Matchers as MT+import qualified Data.Prednote as P -- | A function that makes Matchers. type Factory@@ -14,7 +15,7 @@ -- ^ The pattern to use when testing for a match. For example, this -- might be a regular expression, or simply the text to be matched. - -> Either X.Text MT.Matcher+ -> Either X.Text (P.Predbox X.Text) -- ^ Sometimes producing a matcher might fail; for example, the user -- might have supplied a bad pattern. If so, an exception is- -- returned. On success, a Matcher is returned.+ -- returned. On success, a matcher is returned.
lib/Penny/Lincoln/Predicates.hs view
@@ -49,44 +49,47 @@ import qualified Penny.Lincoln.Queries as Q import Penny.Lincoln.Ents (Posting) import qualified Penny.Lincoln.Ents as E-import qualified Text.Matchers as M-import qualified Data.Prednote.Pdct as P+import qualified Data.Prednote as P import Penny.Lincoln.Serial (forward, backward) -type LPdct = P.Pdct Posting+type LPdct = P.Predbox Posting -type MakePdct = M.Matcher -> LPdct+type MakePdct = P.Predbox Text -> LPdct -- * Matching helpers++eval :: P.Predbox a -> a -> Bool+eval pb = P.rBool . P.evaluate pb+ match :: HasText a => Text -- ^ Description of this field -> (Posting -> a) -- ^ Function that returns the field being matched- -> M.Matcher+ -> P.Predbox Text -> LPdct-match t f m = P.operand desc pd+match t f m = P.predicate desc pd where desc = makeDesc t m- pd = M.match m . text . f+ pd = eval m . text . f matchMaybe :: HasText a => Text -- ^ Description of this field -> (Posting -> Maybe a)- -> M.Matcher+ -> P.Predbox Text -> LPdct-matchMaybe t f m = P.operand desc pd+matchMaybe t f m = P.predicate desc pd where desc = makeDesc t m- pd = maybe False (M.match m . text) . f+ pd = maybe False (eval m . text) . f -makeDesc :: Text -> M.Matcher -> Text+makeDesc :: Text -> P.Predbox Text -> Text makeDesc t m = "subject: " <> t- <> " matcher: " <> M.matchDesc m+ <> " matcher: " <> P.pLabel m -- | Does the given matcher match any of the elements of the Texts in -- a HasTextList?@@ -94,12 +97,12 @@ :: HasTextList a => Text -> (Posting -> a)- -> M.Matcher+ -> P.Predbox Text -> LPdct-matchAny t f m = P.operand desc pd+matchAny t f m = P.predicate desc pd where desc = makeDesc t m- pd = any (M.match m) . textList . f+ pd = any (eval m) . textList . f -- | Does the given matcher match the text that is at the given -- element of a HasTextList? If the HasTextList does not have a@@ -109,28 +112,28 @@ => Int -> Text -> (Posting -> a)- -> M.Matcher+ -> P.Predbox Text -> LPdct-matchLevel l d f m = P.operand desc pd+matchLevel l d f m = P.predicate desc pd where desc = makeDesc ("level " <> X.pack (show l) <> " of " <> d) m pd pf = let ts = textList (f pf) in if l < 0 || l >= length ts then False- else M.match m (ts !! l)+ else eval m (ts !! l) -- | Does the matcher match the text of the memo? Joins each line of -- the memo with a space. matchMemo :: Text -> (Posting -> Maybe B.Memo)- -> M.Matcher+ -> P.Predbox Text -> LPdct-matchMemo t f m = P.operand desc pd+matchMemo t f m = P.predicate desc pd where desc = makeDesc t m pd = maybe False doMatch . f- doMatch = M.match m+ doMatch = eval m . X.intercalate (X.singleton ' ') . B.unMemo @@ -141,7 +144,7 @@ -> Text -- ^ Label -> (Posting -> a)- -> M.Matcher+ -> P.Predbox Text -> LPdct matchDelimited sep lbl f m = match lbl f' m where@@ -181,7 +184,7 @@ drCr :: B.DrCr -> LPdct-drCr dc = P.operand desc pd+drCr dc = P.predicate desc pd where desc = "entry is a " <> s s = case dc of { B.Debit -> "debit"; B.Credit -> "credit" }@@ -193,30 +196,30 @@ credit :: LPdct credit = drCr B.Credit -commodity :: M.Matcher -> LPdct+commodity :: P.Predbox Text -> LPdct commodity = match "commodity" Q.commodity -account :: M.Matcher -> LPdct+account :: P.Predbox Text -> LPdct account = matchDelimited ":" "account" Q.account -accountLevel :: Int -> M.Matcher -> LPdct+accountLevel :: Int -> P.Predbox Text -> LPdct accountLevel i = matchLevel i "account" Q.account -accountAny :: M.Matcher -> LPdct+accountAny :: P.Predbox Text -> LPdct accountAny = matchAny "any sub-account" Q.account -tag :: M.Matcher -> LPdct+tag :: P.Predbox Text -> LPdct tag = matchAny "any tag" Q.tags -- | True if a posting is reconciled; that is, its flag is exactly -- @R@. reconciled :: LPdct-reconciled = P.operand d p+reconciled = P.predicate d p where d = "posting flag is exactly \"R\" (is reconciled)" p = maybe False ((== X.singleton 'R') . B.unFlag) . Q.flag -filename :: M.Matcher -> LPdct+filename :: P.Predbox Text -> LPdct filename = matchMaybe "filename" Q.filename -- | Makes Pdct based on comparisons against a particular serial.@@ -235,9 +238,9 @@ -- ^ The Pdct returned will be True if the item has a serial -- and @compare ser rhs@ returns this Ordering; False otherwise. - -> P.Pdct a+ -> P.Predbox a -serialPdct name getSer i o = P.operand n f+serialPdct name getSer i o = P.predicate n f where n = "serial " <> name <> " is " <> descCmp <> " " <> X.pack (show i)@@ -248,7 +251,7 @@ f = fromMaybe False . fmap (\ser -> compare ser i == o) . getSer -type MakeSerialPdct = Int -> Ordering -> P.Pdct Posting+type MakeSerialPdct = Int -> Ordering -> P.Predbox Posting fwdGlobalPosting :: MakeSerialPdct fwdGlobalPosting =
lib/Penny/Lincoln/Predicates/Siblings.hs view
@@ -48,45 +48,48 @@ import Penny.Lincoln.HasText (HasText, text, HasTextList, textList) import qualified Penny.Lincoln.Queries.Siblings as Q import Penny.Lincoln.Ents (Posting)-import qualified Text.Matchers as M-import qualified Data.Prednote.Pdct as P+import qualified Data.Prednote as P -type LPdct = P.Pdct Posting+type LPdct = P.Predbox Posting -type MakePdct = M.Matcher -> LPdct+type MakePdct = P.Predbox Text -> LPdct -- * Matching helpers++eval :: P.Predbox a -> a -> Bool+eval pb = P.rBool . P.evaluate pb+ match :: HasText a => Text -- ^ Description of this field -> (Posting -> [a]) -- ^ Function that returns the field being matched- -> M.Matcher+ -> P.Predbox Text -> LPdct-match t f m = P.operand desc pd+match t f m = P.predicate desc pd where desc = makeDesc t m- pd = any (M.match m) . map text . f+ pd = any (eval m) . map text . f matchMaybe :: HasText a => Text -- ^ Description of this field -> (Posting -> [Maybe a])- -> M.Matcher+ -> P.Predbox Text -> LPdct-matchMaybe t f m = P.operand desc pd+matchMaybe t f m = P.predicate desc pd where desc = makeDesc t m pd = any (== (Just True))- . map (fmap (M.match m . text))+ . map (fmap (eval m . text)) . f -makeDesc :: Text -> M.Matcher -> Text+makeDesc :: Text -> P.Predbox Text -> Text makeDesc t m = "subject: " <> t <> " (any sibling posting) matcher: "- <> M.matchDesc m+ <> P.pLabel m -- | Does the given matcher match any of the elements of the Texts in -- a HasTextList?@@ -94,12 +97,12 @@ :: HasTextList a => Text -> (Posting -> [a])- -> M.Matcher+ -> P.Predbox Text -> LPdct-matchAny t f m = P.operand desc pd+matchAny t f m = P.predicate desc pd where desc = makeDesc t m- pd = any (any (M.match m)) . map textList . f+ pd = any (any (eval m)) . map textList . f -- | Does the given matcher match the text that is at the given -- element of a HasTextList? If the HasTextList does not have a@@ -109,14 +112,14 @@ => Int -> Text -> (Posting -> [a])- -> M.Matcher+ -> P.Predbox Text -> LPdct-matchLevel l d f m = P.operand desc pd+matchLevel l d f m = P.predicate desc pd where desc = makeDesc ("level " <> X.pack (show l) <> " of " <> d) m pd pf = let doMatch list = if l < 0 || l >= length list then False- else M.match m (list !! l)+ else eval m (list !! l) in any doMatch . map textList . f $ pf -- | Does the matcher match the text of the memo? Joins each line of@@ -124,13 +127,13 @@ matchMemo :: Text -> (Posting -> [Maybe B.Memo])- -> M.Matcher+ -> P.Predbox Text -> LPdct-matchMemo t f m = P.operand desc pd+matchMemo t f m = P.predicate desc pd where desc = makeDesc t m pd = any (maybe False doMatch) . f- doMatch = M.match m+ doMatch = eval m . X.intercalate (X.singleton ' ') . B.unMemo @@ -141,7 +144,7 @@ -> Text -- ^ Label -> (Posting -> [a])- -> M.Matcher+ -> P.Predbox Text -> LPdct matchDelimited sep lbl f m = match lbl f' m where@@ -164,7 +167,7 @@ -- | A Pdct that returns True if @compare subject qty@ returns the -- given Ordering. qty :: Ordering -> B.Qty -> LPdct-qty o q = P.operand desc pd+qty o q = P.predicate desc pd where desc = "quantity of any sibling is " <> dd <> " " <> X.pack (show q) dd = case o of@@ -188,7 +191,7 @@ | otherwise = Nothing drCr :: B.DrCr -> LPdct-drCr dc = P.operand desc pd+drCr dc = P.predicate desc pd where desc = "entry of any sibling is a " <> s s = case dc of { B.Debit -> "debit"; B.Credit -> "credit" }@@ -200,25 +203,25 @@ credit :: LPdct credit = drCr B.Credit -commodity :: M.Matcher -> LPdct+commodity :: P.Predbox Text -> LPdct commodity = match "commodity" Q.commodity -account :: M.Matcher -> LPdct+account :: P.Predbox Text -> LPdct account = matchDelimited ":" "account" Q.account -accountLevel :: Int -> M.Matcher -> LPdct+accountLevel :: Int -> P.Predbox Text -> LPdct accountLevel i = matchLevel i "account" Q.account -accountAny :: M.Matcher -> LPdct+accountAny :: P.Predbox Text -> LPdct accountAny = matchAny "any sub-account" Q.account -tag :: M.Matcher -> LPdct+tag :: P.Predbox Text -> LPdct tag = matchAny "any tag" Q.tags -- | True if a posting is reconciled; that is, its flag is exactly -- @R@. reconciled :: LPdct-reconciled = P.operand d p+reconciled = P.predicate d p where d = "posting flag is exactly \"R\" (is reconciled)" p = any (maybe False ((== X.singleton 'R') . B.unFlag))@@ -246,9 +249,9 @@ -- item has a srerial and @compare@ does not return this Ordering; -- Nothing if the item does not have a serial. - -> P.Pdct E.Posting+ -> P.Predbox E.Posting -serialPdct name getSer i o = P.operand n f+serialPdct name getSer i o = P.predicate n f where n = "serial " <> name <> " is " <> descCmp <> " " <> X.pack (show i)@@ -264,7 +267,7 @@ . second E.tailEnts . E.unPosting -type MakeSerialPdct = Int -> Ordering -> P.Pdct Posting+type MakeSerialPdct = Int -> Ordering -> P.Predbox Posting fwdGlobalPosting :: MakeSerialPdct fwdGlobalPosting =
lib/Penny/Wheat.hs view
@@ -40,8 +40,7 @@ import qualified Data.Sums as Su import qualified Data.Version as V-import qualified Data.Prednote.Test as TT-import qualified Data.Prednote.Pdct as Pe+import qualified Data.Prednote as Pd import qualified System.Console.Rainbow as Rb import qualified System.Console.MultiArg as MA import System.Locale (defaultTimeLocale)@@ -76,20 +75,20 @@ -- of lines, wich each line not terminated by a newline -- character. It is displayed at the end of the online help. - , tests :: [Time.UTCTime -> TT.Test L.Posting]+ , tests :: [Time.UTCTime -> Pd.Test L.Posting] -- ^ The actual tests to run. The UTCTime is the @base time@. Each -- test may decide what to do with the base time--for example, the -- test might say that all postings have to have a date on or -- before that date. Or the test might just ignore the base time. - , indentAmt :: Pe.IndentAmt+ , indentAmt :: Pd.IndentAmt -- ^ How many spaces to indent each level in a tree of tests. - , verbosity :: Maybe TT.TestVerbosity+ , verbosity :: Maybe Pd.TestVerbosity -- ^ If Just, use this verbosity. If Nothing, use the default -- verbosity provided by the tests themselves. - , testPred :: TT.Name -> Bool+ , testPred :: Pd.Name -> Bool -- ^ Test names are filtered with this function; a test is only -- run if this function returns True. @@ -114,11 +113,11 @@ Left e -> Left (MA.ErrorMsg $ "could not parse date: " ++ show e) Right g -> return . L.toUTC $ g -parseRegexp :: String -> Either MA.InputError (TT.Name -> Bool)+parseRegexp :: String -> Either MA.InputError (Pd.Name -> Bool) parseRegexp s = case M.pcre M.Sensitive (X.pack s) of Left e -> Left . MA.ErrorMsg $ "could not parse regular expression: " ++ X.unpack e- Right m -> return . M.match $ m+ Right m -> return (\n -> Pd.rBool (Pd.evaluate m n)) allOpts :: [MA.OptSpec (WheatConf -> WheatConf)] allOpts =@@ -173,7 +172,7 @@ items <- Cop.open args let pstgs = getItems items formatter = formatQty conf items- let tsts = filter ((testPred conf) . TT.testName)+ let tsts = filter ((testPred conf) . Pd.testName) . map ($ (L.toUTC . S.currentTime $ rt)) . tests $ conf@@ -190,16 +189,16 @@ -> WheatConf -> [L.Posting] -> Rb.Term- -> TT.Test L.Posting+ -> Pd.Test L.Posting -> IO Bool runTest fmt c ps term test = do- let rslt = TT.evalTest test ps- cks = TT.showResult (indentAmt c) (L.display fmt)- (verbosity c) rslt+ let rslt = Pd.evalTest test ps+ cks = Pd.showTestResult (indentAmt c) (L.display fmt)+ (verbosity c) rslt Rb.putChunks term cks- if stopOnFail c && not (TT.resultPass rslt)+ if stopOnFail c && not (Pd.resultPass rslt) then Exit.exitFailure- else return (TT.resultPass rslt)+ else return (Pd.resultPass rslt) getItems :: [Cop.LedgerItem] -> [L.Posting] getItems@@ -213,19 +212,19 @@ -- | Passes only if each posting is True. eachPostingMustBeTrue- :: TT.Name- -> Pe.Pdct L.Posting- -> TT.Test L.Posting-eachPostingMustBeTrue n pd = TT.eachSubjectMustBeTrue pd n+ :: Pd.Name+ -> Pd.Predbox L.Posting+ -> Pd.Test L.Posting+eachPostingMustBeTrue n pd = Pd.eachSubjectMustBeTrue pd n -- | Passes if at least a particular number of postings is True. atLeastNPostings :: Int -- ^ The number of postings that must be true for the test to pass- -> TT.Name- -> Pe.Pdct L.Posting- -> TT.Test L.Posting-atLeastNPostings i n pd = TT.nSubjectsMustBeTrue pd n i+ -> Pd.Name+ -> Pd.Predbox L.Posting+ -> Pd.Test L.Posting+atLeastNPostings i n pd = Pd.nSubjectsMustBeTrue pd n i -- -- Help
lib/Penny/Zinc.hs view
@@ -16,7 +16,7 @@ import qualified Penny.Copper as C import qualified Penny.Liberty as Ly import qualified Data.Prednote.Expressions as X-import qualified Data.Prednote.Pdct as Pe+import qualified Data.Prednote as Pe import qualified Penny.Lincoln as L import qualified Penny.Lincoln.Queries as Q import qualified Penny.Shield as S@@ -200,7 +200,7 @@ else mconcat exSpecs type Factory = M.CaseSensitive- -> Text -> Either Text M.Matcher+ -> Text -> Either Text (Pe.Predbox Text) makeToken :: OptResult@@ -324,7 +324,7 @@ , foColorToFile :: ColorToFile , foExprDesc :: X.ExprDesc- , foPredicate :: Pe.Pdct L.Posting+ , foPredicate :: Pe.Predbox L.Posting , foShowExpression :: ShowExpression , foVerboseFilter :: VerboseFilter }@@ -405,13 +405,13 @@ showFilterExpression :: ([R.Chunk] -> IO ()) -> ShowExpression- -> Pe.Pdct L.Posting+ -> Pe.Predbox L.Posting -> IO () showFilterExpression ptr (ShowExpression se) pdct = if not se then return () else ptr $ info : blankLine :- (Pe.showPdct indentAmt 0 pdct ++ [blankLine])+ (Pe.showPredbox indentAmt 0 pdct ++ [blankLine]) where info = "Posting filter expression:\n"
minimum-versions.txt view
@@ -1,11 +1,11 @@ This package was tested to work with these dependency versions and compiler version. These are the minimum versions given in the .cabal file.-Tested as of: 2014-03-08 16:59:06.573315 UTC+Tested as of: 2014-04-16 17:16:55.729949 UTC Path to compiler: ghc-7.4.1 Compiler description: 7.4.1 -/opt/ghc/7.4.1/lib/ghc-7.4.1/package.conf.d:+/var/lib/ghc/package.conf.d: Cabal-1.14.0 array-0.4.0.0 base-4.5.0.0@@ -33,34 +33,44 @@ time-1.4 unix-2.5.1.0 -/home/massysett/penny/sunlight-15431/db:+/home/massysett/penny/sunlight-10948/db: MonadRandom-0.1.13- QuickCheck-2.5+ QuickCheck-2.6 action-permutations-0.0.0.0 anonymous-sums-0.4.0.0+ ansi-terminal-0.6.1.1+ ansi-wl-pprint-0.6.7.1+ async-2.0.1.5 cereal-0.3.5.2 comonad-3.1- contravariant-0.4.4+ contravariant-0.2.0.1 either-3.4.1 haskell-lexer-1.0- matchers-0.14.0.2- mtl-2.1.2+ matchers-0.18.0.0+ mtl-2.1.3.1 multiarg-0.24.0.4 nats-0.1.2 ofx-0.4.0.2+ optparse-applicative-0.8.0.1 parsec-3.1.3- penny-0.32.0.6- prednote-0.18.0.4+ penny-0.32.0.8+ prednote-0.22.0.2 pretty-show-1.5- rainbow-0.12.0.0+ rainbow-0.14.0.0+ rainbox-0.4.0.2 random-1.0.0.0 random-shuffle-0.0.4+ regex-base-0.93.2+ regex-tdfa-1.2.0 semigroupoids-3.1 semigroups-0.9.2 split-0.2.2- tagged-0.7+ stm-2.4.3+ tagged-0.7.1+ tasty-0.8.0.4+ tasty-quickcheck-0.8 terminfo-0.4.0.0- text-0.11.2.0+ text-0.11.3.1 transformers-0.3.0.0- transformers-compat-0.1.1.1+ unbounded-delays-0.1.0.7
penny.cabal view
@@ -3,8 +3,8 @@ -- penny.cabal for you. Name: penny-Version: 0.32.0.6-Cabal-version: >=1.8+Version: 0.32.0.8+Cabal-version: >=1.14 Build-Type: Simple License: BSD3 Copyright: 2012-2014 Omari Norman.@@ -15,6 +15,7 @@ bug-reports: omari@smileystation.com Category: Console, Finance License-File: LICENSE+tested-with: GHC ==7.4.1, GHC ==7.6.3 synopsis: Extensible double-entry accounting system @@ -39,6 +40,7 @@ , current-versions.txt , minimum-versions.txt , penny.cabal.m4+ , changelog source-repository head type: git@@ -47,37 +49,39 @@ Library Build-depends:- base >= 4.5.0.0 && < 5+ base >= 4.5.0.0 && < 4.7 -- Do not try to put comments on same line as data; Cabal does -- not allow this. -- Package Version- , bytestring >= 0.9.2.1- , containers >= 0.4.2.1- , old-locale >= 1.0.0.4- , parsec >= 3.1.3- , split >= 0.2.2- , text >= 0.11.2.0- , time >= 1.4+ , bytestring >= 0.9.2.1 && < 0.11+ , containers >= 0.4.2.1 && < 0.6+ , old-locale >= 1.0.0.4 && < 1.1+ , parsec >= 3.1.3 && < 3.2+ , split >= 0.2.2 && < 0.3+ , text >= 0.11.3.1 && < 1.2+ , time >= 1.4 && < 1.5 , transformers >= 0.3.0.0 -- Omari packages -- Package Version , anonymous-sums >= 0.4.0.0- , matchers >= 0.14.0.2 && < 0.15.0.0- , multiarg >= 0.24.0.4 && < 0.25.0.0- , ofx >= 0.4.0.2- , prednote >= 0.18.0.4 && < 0.19.0.0- , rainbow >= 0.12.0.0+ , matchers >= 0.18.0.0 && < 0.19+ , multiarg >= 0.24.0.4 && < 0.27.0.0+ , ofx >= 0.4.0.2 && < 0.5+ , prednote >= 0.22.0.2 && < 0.23+ , rainbow >= 0.14.0.0 && < 0.15.0.0+ , rainbox >= 0.4.0.2 && < 0.5 -- Other packages -- Package Version- , action-permutations == 0.0.0.0- , cereal >= 0.3.5.2- , either >= 3.4.1- , pretty-show >= 1.5- , semigroups >= 0.9.2+ , action-permutations >= 0.0.0.0 && < 0.0.0.2+ , cereal >= 0.3.5.2 && < 0.5+ , contravariant >= 0.2.0.1 && < 0.5+ , either >= 3.4.1 && < 4.2+ , pretty-show >= 1.5 && < 1.7+ , semigroups >= 0.9.2 && < 0.14 Exposed-modules: Penny@@ -166,6 +170,7 @@ ghc-options: -Wall if flag(debug) ghc-options: -auto-all -caf-all+ default-language: Haskell2010 Test-Suite penny-test type: exitcode-stdio-1.0@@ -178,26 +183,27 @@ , Copper.Render , Lincoln hs-source-dirs: tests+ default-language: Haskell2010 -- For details on why penny is a dependency here, see -- http://stackoverflow.com/questions/6711151 build-depends:- penny == 0.32.0.6- , base >= 4.5.0.0 && < 5+ penny == 0.32.0.8+ , base >= 4.5.0.0 && < 4.7 -- Packages I maintain- , multiarg >= 0.24.0.4 && < 0.25.0.0- , anonymous-sums >= 0.4.0.0+ , multiarg >= 0.24.0.4 && < 0.27.0.0+ , anonymous-sums >= 0.4.0.0 && < 0.5 -- Other packages- , QuickCheck >= 2.5- , random-shuffle >= 0.0.4- , parsec >= 3.1.3- , semigroups >= 0.9.2- , text >= 0.11.2.0- , time >= 1.4- , transformers >= 0.3.0.0+ , QuickCheck >= 2.6 && < 2.7+ , random-shuffle == 0.0.4+ , parsec >= 3.1.3 && < 3.2+ , semigroups >= 0.9.2 && < 0.14+ , text >= 0.11.3.1 && < 1.2+ , time >= 1.4 && < 1.5+ , transformers >= 0.3.0.0 && < 0.4 ghc-options: -Wall @@ -207,23 +213,24 @@ Copper.Gen.Parsers , Copper.Gen.Terminals hs-source-dirs: tests+ default-language: Haskell2010 if flag(build-gibberish) build-depends:- penny == 0.32.0.6- , base >= 4.5.0.0 && < 5+ penny == 0.32.0.8+ , base >= 4.5.0.0 && < 4.7 -- Packages I maintain- , multiarg >= 0.24.0.4 && < 0.25.0.0+ , multiarg >= 0.24.0.4 && < 0.27.0.0 -- Other packages- , QuickCheck >= 2.5- , random-shuffle >= 0.0.4- , random >= 1.0.0.0- , semigroups >= 0.9.2- , text >= 0.11.2.0- , time >= 1.4- , transformers >= 0.3.0.0+ , QuickCheck >= 2.6 && < 2.7+ , random-shuffle == 0.0.4+ , random >= 1.0.0.0 && < 1.1+ , semigroups >= 0.9.2 && < 0.14+ , text >= 0.11.3.1 && < 1.2+ , time >= 1.4 && < 1.5+ , transformers >= 0.3.0.0 && < 0.4 else buildable: False@@ -236,13 +243,14 @@ Executable penny Build-depends:- penny ==0.32.0.6- , base >= 4.5.0.0 && < 5+ penny ==0.32.0.8+ , base >= 4.5.0.0 && < 4.7 hs-source-dirs: bin Main-is: penny-main.hs Other-modules: Paths_penny GHC-Options: -Wall+ default-language: Haskell2010 if flag(debug) GHC-Options: -rtsopts -auto-all -caf-all @@ -255,12 +263,13 @@ Executable penny-selloff Build-depends:- penny == 0.32.0.6- , base >= 4.5.0.0 && < 5+ penny == 0.32.0.8+ , base >= 4.5.0.0 && < 4.7 other-modules: Paths_penny hs-source-dirs: bin Main-is: penny-selloff.hs+ default-language: Haskell2010 GHC-Options: -Wall if flag(debug) GHC-Options: -rtsopts -auto-all -caf-all@@ -274,13 +283,14 @@ Executable penny-diff Build-depends:- penny == 0.32.0.6- , base >= 4.5.0.0 && < 5+ penny == 0.32.0.8+ , base >= 4.5.0.0 && < 4.7 hs-source-dirs: bin Main-is: penny-diff.hs Other-modules: Paths_penny GHC-Options: -Wall+ default-language: Haskell2010 if flag(debug) GHC-Options: -rtsopts -auto-all -caf-all @@ -293,13 +303,14 @@ Executable penny-reprint Build-depends:- penny == 0.32.0.6- , base >= 4.5.0.0 && < 5+ penny == 0.32.0.8+ , base >= 4.5.0.0 && < 4.7 hs-source-dirs: bin main-is: penny-reprint.hs Other-modules: Paths_penny ghc-options: -Wall+ default-language: Haskell2010 if ! flag(build-reprint) buildable: False @@ -309,11 +320,12 @@ Executable penny-reconcile Build-depends:- penny == 0.32.0.6- , base >= 4.5.0.0 && < 5+ penny == 0.32.0.8+ , base >= 4.5.0.0 && < 4.7 hs-source-dirs: bin main-is: penny-reconcile.hs+ default-language: Haskell2010 Other-modules: Paths_penny ghc-options: -Wall if ! flag(build-reconcile)
penny.cabal.m4 view
@@ -4,7 +4,7 @@ Name: penny Version: pv_penny-Cabal-version: >=1.8+Cabal-version: >=1.14 Build-Type: Simple License: BSD3 Copyright: 2012-2014 Omari Norman.@@ -15,6 +15,7 @@ bug-reports: omari@smileystation.com Category: Console, Finance License-File: LICENSE+tested-with: GHC ==7.4.1, GHC ==7.6.3 synopsis: Extensible double-entry accounting system @@ -39,6 +40,7 @@ , current-versions.txt , minimum-versions.txt , penny.cabal.m4+ , changelog source-repository head type: git@@ -53,13 +55,13 @@ -- not allow this. -- Package Version- , bytestring >= pv_bytestring- , containers >= pv_containers- , old-locale >= pv_old_locale- , parsec >= pv_parsec- , split >= pv_split- , text >= pv_text- , time >= pv_time+ , bytestring >= pv_bytestring && < pv_bytestring_max+ , containers >= pv_containers && < pv_containers_max+ , old-locale >= pv_old_locale && < pv_old_locale_max+ , parsec >= pv_parsec && < pv_parsec_max+ , split >= pv_split && < pv_split_max+ , text >= pv_text && < pv_text_max+ , time >= pv_time && < pv_time_max , transformers >= pv_transformers -- Omari packages@@ -67,17 +69,19 @@ , anonymous-sums >= pv_anonymous_sums , matchers >= pv_matchers && < pv_matchers_max , multiarg >= pv_multiarg && < pv_multiarg_max- , ofx >= pv_ofx+ , ofx >= pv_ofx && < pv_ofx_max , prednote >= pv_prednote && < pv_prednote_max- , rainbow >= pv_rainbow+ , rainbow >= pv_rainbow && < pv_rainbow_max+ , rainbox >= pv_rainbox && < pv_rainbox_max -- Other packages -- Package Version- , action-permutations == pv_action_permutations- , cereal >= pv_cereal- , either >= pv_either- , pretty-show >= pv_pretty_show- , semigroups >= pv_semigroups+ , action-permutations >= pv_action_permutations && < pv_action_permutations_max+ , cereal >= pv_cereal && < pv_cereal_max+ , contravariant >= pv_contravariant && < pv_contravariant_max+ , either >= pv_either && < pv_either_max+ , pretty-show >= pv_pretty_show && < pv_pretty_show_max+ , semigroups >= pv_semigroups && < pv_semigroups_max Exposed-modules: Penny@@ -166,6 +170,7 @@ ghc-options: -Wall if flag(debug) ghc-options: -auto-all -caf-all+ default-language: Haskell2010 Test-Suite penny-test type: exitcode-stdio-1.0@@ -178,26 +183,27 @@ , Copper.Render , Lincoln hs-source-dirs: tests+ default-language: Haskell2010 -- For details on why penny is a dependency here, see -- http://stackoverflow.com/questions/6711151 build-depends: penny == pv_penny- , base >= pv_base && < pv_base_max+ , base >= pv_base && < pv_base_max -- Packages I maintain , multiarg >= pv_multiarg && < pv_multiarg_max- , anonymous-sums >= pv_anonymous_sums+ , anonymous-sums >= pv_anonymous_sums && < pv_anonymous_sums_max -- Other packages- , QuickCheck >= pv_QuickCheck- , random-shuffle >= pv_random_shuffle- , parsec >= pv_parsec- , semigroups >= pv_semigroups- , text >= pv_text- , time >= pv_time- , transformers >= pv_transformers+ , QuickCheck >= pv_QuickCheck && < pv_QuickCheck_max+ , random-shuffle == pv_random_shuffle+ , parsec >= pv_parsec && < pv_parsec_max+ , semigroups >= pv_semigroups && < pv_semigroups_max+ , text >= pv_text && < pv_text_max+ , time >= pv_time && < pv_time_max+ , transformers >= pv_transformers && < pv_transformers_max ghc-options: -Wall @@ -207,23 +213,24 @@ Copper.Gen.Parsers , Copper.Gen.Terminals hs-source-dirs: tests+ default-language: Haskell2010 if flag(build-gibberish) build-depends: penny == pv_penny- , base >= pv_base && < pv_base_max+ , base >= pv_base && < pv_base_max -- Packages I maintain , multiarg >= pv_multiarg && < pv_multiarg_max -- Other packages- , QuickCheck >= pv_QuickCheck- , random-shuffle >= pv_random_shuffle- , random >= pv_random- , semigroups >= pv_semigroups- , text >= pv_text- , time >= pv_time- , transformers >= pv_transformers+ , QuickCheck >= pv_QuickCheck && < pv_QuickCheck_max+ , random-shuffle == pv_random_shuffle+ , random >= pv_random && < pv_random_max+ , semigroups >= pv_semigroups && < pv_semigroups_max+ , text >= pv_text && < pv_text_max+ , time >= pv_time && < pv_time_max+ , transformers >= pv_transformers && < pv_transformers_max else buildable: False@@ -237,12 +244,13 @@ Executable penny Build-depends: penny ==pv_penny- , base >= pv_base && < pv_base_max+ , base >= pv_base && < pv_base_max hs-source-dirs: bin Main-is: penny-main.hs Other-modules: Paths_penny GHC-Options: -Wall+ default-language: Haskell2010 if flag(debug) GHC-Options: -rtsopts -auto-all -caf-all @@ -256,11 +264,12 @@ Executable penny-selloff Build-depends: penny == pv_penny- , base >= pv_base && < pv_base_max+ , base >= pv_base && < pv_base_max other-modules: Paths_penny hs-source-dirs: bin Main-is: penny-selloff.hs+ default-language: Haskell2010 GHC-Options: -Wall if flag(debug) GHC-Options: -rtsopts -auto-all -caf-all@@ -275,12 +284,13 @@ Executable penny-diff Build-depends: penny == pv_penny- , base >= pv_base && < pv_base_max+ , base >= pv_base && < pv_base_max hs-source-dirs: bin Main-is: penny-diff.hs Other-modules: Paths_penny GHC-Options: -Wall+ default-language: Haskell2010 if flag(debug) GHC-Options: -rtsopts -auto-all -caf-all @@ -294,12 +304,13 @@ Executable penny-reprint Build-depends: penny == pv_penny- , base >= pv_base && < pv_base_max+ , base >= pv_base && < pv_base_max hs-source-dirs: bin main-is: penny-reprint.hs Other-modules: Paths_penny ghc-options: -Wall+ default-language: Haskell2010 if ! flag(build-reprint) buildable: False @@ -310,10 +321,11 @@ Executable penny-reconcile Build-depends: penny == pv_penny- , base >= pv_base && < pv_base_max+ , base >= pv_base && < pv_base_max hs-source-dirs: bin main-is: penny-reconcile.hs+ default-language: Haskell2010 Other-modules: Paths_penny ghc-options: -Wall if ! flag(build-reconcile)
versions.m4 view
@@ -1,39 +1,37 @@ divert(-1) # Penny version-define(`pv_penny', `0.32.0.6')+define(`pv_penny', `0.32.0.8') # Haskell Platform-define(`pv_base', `4.5.0.0')-define(`pv_base_max', `5')-define(`pv_bytestring', `0.9.2.1')-define(`pv_containers', `0.4.2.1')-define(`pv_old_locale', `1.0.0.4')-define(`pv_parsec', `3.1.3')-define(`pv_QuickCheck', `2.5')-define(`pv_split', `0.2.2')-define(`pv_text', `0.11.2.0')-define(`pv_time', `1.4')-define(`pv_transformers', `0.3.0.0')+define(`pv_base', `4.5.0.0') define(`pv_base_max', `4.7')+define(`pv_bytestring', `0.9.2.1') define(`pv_bytestring_max', `0.11')+define(`pv_containers', `0.4.2.1') define(`pv_containers_max', `0.6')+define(`pv_old_locale', `1.0.0.4') define(`pv_old_locale_max', `1.1')+define(`pv_parsec', `3.1.3') define(`pv_parsec_max', `3.2')+define(`pv_QuickCheck', `2.6') define(`pv_QuickCheck_max', `2.7')+define(`pv_split', `0.2.2') define(`pv_split_max', `0.3')+define(`pv_text', `0.11.3.1') define(`pv_text_max', `1.2')+define(`pv_time', `1.4') define(`pv_time_max', `1.5')+define(`pv_transformers', `0.3.0.0') define(`pv_transformers_max', `0.4') # Packages I maintain-define(`pv_anonymous_sums', `0.4.0.0')-define(`pv_matchers', `0.14.0.2')-define(`pv_matchers_max', `0.15.0.0')-define(`pv_multiarg', `0.24.0.4')-define(`pv_multiarg_max', `0.25.0.0')-define(`pv_ofx', `0.4.0.2')-define(`pv_prednote', `0.18.0.4')-define(`pv_prednote_max', `0.19.0.0')-define(`pv_rainbow', `0.12.0.0')+define(`pv_anonymous_sums', `0.4.0.0') define(`pv_anonymous_sums_max', `0.5')+define(`pv_matchers', `0.18.0.0') define(`pv_matchers_max', `0.19')+define(`pv_multiarg', `0.24.0.4') define(`pv_multiarg_max', `0.27.0.0')+define(`pv_ofx', `0.4.0.2') define(`pv_ofx_max', `0.5')+define(`pv_prednote', `0.22.0.2') define(`pv_prednote_max', `0.23')+define(`pv_rainbow', `0.14.0.0') define(`pv_rainbow_max', `0.15.0.0')+define(`pv_rainbox', `0.4.0.2') define(`pv_rainbox_max', `0.5') # Other packages-define(`pv_action_permutations', `0.0.0.0')-define(`pv_cereal', `0.3.5.2')-define(`pv_either', `3.4.1')-define(`pv_pretty_show', `1.5')-define(`pv_random', `1.0.0.0')+define(`pv_contravariant', `0.2.0.1') define(`pv_contravariant_max', `0.5')+define(`pv_action_permutations', `0.0.0.0') define(`pv_action_permutations_max', `0.0.0.2')+define(`pv_cereal', `0.3.5.2') define(`pv_cereal_max', `0.5')+define(`pv_either', `3.4.1') define(`pv_either_max', `4.2')+define(`pv_pretty_show', `1.5') define(`pv_pretty_show_max', `1.7')+define(`pv_random', `1.0.0.0') define(`pv_random_max', `1.1') define(`pv_random_shuffle', `0.0.4')-define(`pv_semigroups', `0.9.2')+define(`pv_semigroups', `0.9.2') define(`pv_semigroups_max', `0.14') divert(1)dnl