-- Hoogle documentation, generated by Haddock -- See Hoogle, http://www.haskell.org/hoogle/ -- | Library for working with commoditized amounts and price histories -- -- Library for working with commoditized amounts and price histories @package commodities @version 0.2.0.1 module Ledger.Commodity -- | Commodities are simply indices into a commodity info map, which -- relates such commodities to the information known about them. type Commodity = Key -- | All of the information known about a commodity. data CommodityInfo CommodityInfo :: !Text -> !Int -> !Bool -> !Bool -> !Bool -> !Bool -> !Bool -> !Bool -> !Bool -> !Bool -> !(IntMap (Map UTCTime Rational)) -> CommodityInfo [_commSymbol] :: CommodityInfo -> !Text [_commPrecision] :: CommodityInfo -> !Int [_commSuffixed] :: CommodityInfo -> !Bool [_commSeparated] :: CommodityInfo -> !Bool [_commThousands] :: CommodityInfo -> !Bool [_commDecimalComma] :: CommodityInfo -> !Bool [_commNoMarket] :: CommodityInfo -> !Bool [_commBuiltin] :: CommodityInfo -> !Bool [_commKnown] :: CommodityInfo -> !Bool [_commPrimary] :: CommodityInfo -> !Bool [_commHistory] :: CommodityInfo -> !(IntMap (Map UTCTime Rational)) class HasCommodityInfo c_alz4 where commBuiltin = (.) commodityInfo commBuiltin commDecimalComma = (.) commodityInfo commDecimalComma commHistory = (.) commodityInfo commHistory commKnown = (.) commodityInfo commKnown commNoMarket = (.) commodityInfo commNoMarket commPrecision = (.) commodityInfo commPrecision commPrimary = (.) commodityInfo commPrimary commSeparated = (.) commodityInfo commSeparated commSuffixed = (.) commodityInfo commSuffixed commSymbol = (.) commodityInfo commSymbol commThousands = (.) commodityInfo commThousands commodityInfo :: HasCommodityInfo c_alz4 => Lens' c_alz4 CommodityInfo commBuiltin :: HasCommodityInfo c_alz4 => Lens' c_alz4 Bool commDecimalComma :: HasCommodityInfo c_alz4 => Lens' c_alz4 Bool commHistory :: HasCommodityInfo c_alz4 => Lens' c_alz4 (IntMap (Map UTCTime Rational)) commKnown :: HasCommodityInfo c_alz4 => Lens' c_alz4 Bool commNoMarket :: HasCommodityInfo c_alz4 => Lens' c_alz4 Bool commPrecision :: HasCommodityInfo c_alz4 => Lens' c_alz4 Int commPrimary :: HasCommodityInfo c_alz4 => Lens' c_alz4 Bool commSeparated :: HasCommodityInfo c_alz4 => Lens' c_alz4 Bool commSuffixed :: HasCommodityInfo c_alz4 => Lens' c_alz4 Bool commSymbol :: HasCommodityInfo c_alz4 => Lens' c_alz4 Text commThousands :: HasCommodityInfo c_alz4 => Lens' c_alz4 Bool -- | Return a CommodityInfo with defaults selected for all fields. -- It is intended that at least one field of the result will be modified -- immediately. defaultCommodityInfo :: CommodityInfo defaultPrimaryCommodityInfo :: Text -> CommodityInfo -- | A commodities map, relating commodity indices to information about -- those commodities. data CommodityMap CommodityMap :: !(IntMap CommodityInfo) -> CommodityMap [_commodities] :: CommodityMap -> !(IntMap CommodityInfo) class HasCommodityMap c_alX5 where commodities = (.) commodityMap commodities commodityMap :: HasCommodityMap c_alX5 => Lens' c_alX5 CommodityMap commodities :: HasCommodityMap c_alX5 => Lens' c_alX5 (IntMap CommodityInfo) extendByDigits :: Int instance Ledger.Commodity.HasCommodityMap Ledger.Commodity.CommodityMap instance Data.Semigroup.Semigroup Ledger.Commodity.CommodityMap instance GHC.Base.Monoid Ledger.Commodity.CommodityMap instance GHC.Show.Show Ledger.Commodity.CommodityMap instance GHC.Read.Read Ledger.Commodity.CommodityMap instance GHC.Classes.Eq Ledger.Commodity.CommodityMap instance Ledger.Commodity.HasCommodityInfo Ledger.Commodity.CommodityInfo instance Data.Semigroup.Semigroup Ledger.Commodity.CommodityInfo instance GHC.Base.Monoid Ledger.Commodity.CommodityInfo instance GHC.Show.Show Ledger.Commodity.CommodityInfo instance GHC.Read.Read Ledger.Commodity.CommodityInfo instance GHC.Classes.Eq Ledger.Commodity.CommodityInfo module Ledger.Commodity.History -- | Lookup a price conversion from the source commodity to the target, -- using data from the given time or earlier. Result is Nothing if no -- conversion can be found, or else the best conversion ratio plus the -- time of the oldest link. findConversion :: Commodity -> Commodity -> UTCTime -> CommodityMap -> Maybe (UTCTime, Rational) -- | Add a price conversion in the form of a ratio between two commodities -- at a specific point in time. addConversion :: Commodity -> Commodity -> UTCTime -> Rational -> State CommodityMap () -- | This function computes an optimal (minimal distance) path through a -- graph in a best-first fashion, starting from a given starting point. intAStar :: (Ord c, Num c) => (Key -> IntMap c) -> (Key -> c) -> (Key -> Bool) -> Key -> Maybe [Key] -- | This function computes an optimal (minimal distance) path through a -- graph in a best-first fashion, starting from a given starting point. intAStarM :: (Monad m, Ord c, Num c) => (Key -> m (IntMap c)) -> (Key -> m c) -> (Key -> m Bool) -> m Key -> m (Maybe [Key]) instance (GHC.Classes.Ord c, GHC.Show.Show c) => GHC.Show.Show (Ledger.Commodity.History.IntAStar c) module Ledger.Balance -- | A value representing either zero (all zeroes are equivalent), a -- commoditized value, or a vector space of values indexed by commodity. data Balance a Zero :: Balance a -- | An uncommoditized integer Plain :: a -> Balance a -- | A single commoditized amount Amount :: Commodity -> a -> Balance a -- | A vector-space over commodities Balance :: (IntMap a) -> Balance a noCommodity :: Commodity balanceSum :: Num a => [Balance a] -> Balance a insert :: Int -> a -> Balance a -> Balance a delete :: Int -> Balance a -> Balance a balanceStore :: Indexable f => Key f -> f a -> Store (Key f) a data BalanceError BalanceParseError :: Text -> BalanceError instance GHC.Show.Show Ledger.Balance.BalanceError instance Linear.Vector.Additive Ledger.Balance.Balance instance GHC.Base.Functor Ledger.Balance.Balance instance GHC.Base.Applicative Ledger.Balance.Balance instance Data.Functor.Bind.Class.Apply Ledger.Balance.Balance instance Data.Functor.Bind.Class.Bind Ledger.Balance.Balance instance GHC.Base.Monad Ledger.Balance.Balance instance Data.Key.Lookup Ledger.Balance.Balance instance Data.Key.Indexable Ledger.Balance.Balance instance Control.Lens.Indexed.FunctorWithIndex GHC.Types.Int Ledger.Balance.Balance instance Control.Lens.Indexed.FoldableWithIndex GHC.Types.Int Ledger.Balance.Balance instance Control.Lens.Indexed.TraversableWithIndex GHC.Types.Int Ledger.Balance.Balance instance Data.Key.Adjustable Ledger.Balance.Balance instance Data.Foldable.Foldable Ledger.Balance.Balance instance Data.Traversable.Traversable Ledger.Balance.Balance instance GHC.Num.Num a => Data.Semigroup.Semigroup (Ledger.Balance.Balance a) instance GHC.Num.Num a => GHC.Base.Monoid (Ledger.Balance.Balance a) instance GHC.Num.Num a => Ledger.Balance.Group (Ledger.Balance.Balance a) instance GHC.Exception.Exception Ledger.Balance.BalanceError instance Data.Data.Data a => Data.Data.Data (Ledger.Balance.Balance a) instance GHC.Read.Read a => GHC.Read.Read (Ledger.Balance.Balance a) instance GHC.Show.Show a => GHC.Show.Show (Ledger.Balance.Balance a) instance GHC.Classes.Ord a => GHC.Classes.Ord (Ledger.Balance.Balance a) instance GHC.Classes.Eq a => GHC.Classes.Eq (Ledger.Balance.Balance a) module Ledger.Commodity.Parse parseBalance :: (MonadState CommodityMap m, Functor m, a ~ Rational) => Text -> m (Either BalanceError (Balance a)) balanceParser :: a ~ Rational => Parser (Balance a, CommodityInfo) module Ledger.Commodity.Print printBalance :: (MonadReader CommodityMap m, Functor m, a ~ Rational) => Balance a -> m Text balance :: a ~ Rational => CommodityMap -> Iso' (Balance a) Text