lib: more compact show instance for Amounts (#812)
Amount's default show instance hid important details, making eg test
failures hard to understand. Showing full detail required increasing
the debug level which was inconvenient.
Now it has a single show instance which shows more information, is
fairly compact, and is pretty-printable with pretty-show.
Ellipses (..) in the output indicate where fields are
- not shown in full detail, and/or
- shown in pseudo syntax (double quoted) to work with pretty-show.
ghci> usd 1
OLD:
Amount {acommodity="$", aquantity=1.00, ..}
NEW:
Amount {acommodity = "$", aquantity = 1.00, aprice = NoPrice, astyle = AmountStyle "L False 2 Just '.' Nothing..", amultiplier = False}
MixedAmount's show instance is unchanged, but showMixedAmountDebug
is affected by this change:
ghci> putStrLn $ showMixedAmountDebug $ Mixed [usd 1]
OLD:
Mixed [Amount {acommodity="$", aquantity=1.00, aprice=, astyle=AmountStyle {ascommodityside = L, ascommodityspaced = False, asprecision = 2, asdecimalpoint = Just '.', asdigitgroups = Nothing}}]
NEW:
Mixed [Amount {acommodity="$", aquantity=1.00, aprice=, astyle=AmountStyle "L False 2 Just '.' Nothing.."}]
This commit is contained in:
parent
f47a617dcc
commit
e6181efe95
@ -150,14 +150,12 @@ amountstyle = AmountStyle L False 0 (Just '.') Nothing
|
|||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
-- Amount
|
-- Amount
|
||||||
|
|
||||||
instance Show Amount where
|
instance Show Price where
|
||||||
show _a@Amount{..}
|
show NoPrice = "NoPrice"
|
||||||
-- debugLevel < 2 = showAmountWithoutPrice a
|
show (UnitPrice a) = "\"@ " ++ showAmountWithoutPrice a ++ "..\""
|
||||||
-- debugLevel < 3 = showAmount a
|
show (TotalPrice a) = "\"@@ " ++ showAmountWithoutPrice a ++ "..\""
|
||||||
| debugLevel < 6 =
|
|
||||||
printf "Amount {acommodity=%s, aquantity=%s, ..}" (show acommodity) (show aquantity)
|
deriving instance Show Amount
|
||||||
| otherwise = --showAmountDebug a
|
|
||||||
printf "Amount {acommodity=%s, aquantity=%s, aprice=%s, astyle=%s}" (show acommodity) (show aquantity) (showPriceDebug aprice) (show astyle)
|
|
||||||
|
|
||||||
instance Num Amount where
|
instance Num Amount where
|
||||||
abs a@Amount{aquantity=q} = a{aquantity=abs q}
|
abs a@Amount{aquantity=q} = a{aquantity=abs q}
|
||||||
|
|||||||
@ -1,4 +1,5 @@
|
|||||||
{-# LANGUAGE DeriveDataTypeable, StandaloneDeriving, DeriveGeneric, TypeSynonymInstances, FlexibleInstances, OverloadedStrings #-}
|
{-# LANGUAGE DeriveDataTypeable, StandaloneDeriving, DeriveGeneric, TypeSynonymInstances, FlexibleInstances, OverloadedStrings #-}
|
||||||
|
{-# LANGUAGE RecordWildCards #-}
|
||||||
{-|
|
{-|
|
||||||
|
|
||||||
Most data types are defined here to avoid import cycles.
|
Most data types are defined here to avoid import cycles.
|
||||||
@ -32,6 +33,7 @@ import Data.Text (Text)
|
|||||||
import Data.Time.Calendar
|
import Data.Time.Calendar
|
||||||
import Data.Time.LocalTime
|
import Data.Time.LocalTime
|
||||||
import System.Time (ClockTime(..))
|
import System.Time (ClockTime(..))
|
||||||
|
import Text.Printf
|
||||||
|
|
||||||
import Hledger.Utils.Regex
|
import Hledger.Utils.Regex
|
||||||
|
|
||||||
@ -137,10 +139,19 @@ data AmountStyle = AmountStyle {
|
|||||||
asprecision :: !Int, -- ^ number of digits displayed after the decimal point
|
asprecision :: !Int, -- ^ number of digits displayed after the decimal point
|
||||||
asdecimalpoint :: Maybe Char, -- ^ character used as decimal point: period or comma. Nothing means "unspecified, use default"
|
asdecimalpoint :: Maybe Char, -- ^ character used as decimal point: period or comma. Nothing means "unspecified, use default"
|
||||||
asdigitgroups :: Maybe DigitGroupStyle -- ^ style for displaying digit groups, if any
|
asdigitgroups :: Maybe DigitGroupStyle -- ^ style for displaying digit groups, if any
|
||||||
} deriving (Eq,Ord,Read,Show,Typeable,Data,Generic)
|
} deriving (Eq,Ord,Read,Typeable,Data,Generic)
|
||||||
|
|
||||||
instance NFData AmountStyle
|
instance NFData AmountStyle
|
||||||
|
|
||||||
|
instance Show AmountStyle where
|
||||||
|
show AmountStyle{..} =
|
||||||
|
printf "AmountStyle \"%s %s %s %s %s..\""
|
||||||
|
(show ascommodityside)
|
||||||
|
(show ascommodityspaced)
|
||||||
|
(show asprecision)
|
||||||
|
(show asdecimalpoint)
|
||||||
|
(show asdigitgroups)
|
||||||
|
|
||||||
-- | A style for displaying digit groups in the integer part of a
|
-- | A style for displaying digit groups in the integer part of a
|
||||||
-- floating point number. It consists of the character used to
|
-- floating point number. It consists of the character used to
|
||||||
-- separate groups (comma or period, whichever is not used as decimal
|
-- separate groups (comma or period, whichever is not used as decimal
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user