commodities-0.2.0.1: Library for working with commoditized amounts and price histories

Safe HaskellNone
LanguageHaskell98

Ledger.Balance

Synopsis

Documentation

data Balance a Source #

A value representing either zero (all zeroes are equivalent), a commoditized value, or a vector space of values indexed by commodity.

Constructors

Zero 
Plain a

An uncommoditized integer

Amount Commodity a

A single commoditized amount

Balance (IntMap a)

A vector-space over commodities

Instances

Monad Balance Source # 

Methods

(>>=) :: Balance a -> (a -> Balance b) -> Balance b #

(>>) :: Balance a -> Balance b -> Balance b #

return :: a -> Balance a #

fail :: String -> Balance a #

Functor Balance Source # 

Methods

fmap :: (a -> b) -> Balance a -> Balance b #

(<$) :: a -> Balance b -> Balance a #

Applicative Balance Source # 

Methods

pure :: a -> Balance a #

(<*>) :: Balance (a -> b) -> Balance a -> Balance b #

(*>) :: Balance a -> Balance b -> Balance b #

(<*) :: Balance a -> Balance b -> Balance a #

Foldable Balance Source # 

Methods

fold :: Monoid m => Balance m -> m #

foldMap :: Monoid m => (a -> m) -> Balance a -> m #

foldr :: (a -> b -> b) -> b -> Balance a -> b #

foldr' :: (a -> b -> b) -> b -> Balance a -> b #

foldl :: (b -> a -> b) -> b -> Balance a -> b #

foldl' :: (b -> a -> b) -> b -> Balance a -> b #

foldr1 :: (a -> a -> a) -> Balance a -> a #

foldl1 :: (a -> a -> a) -> Balance a -> a #

toList :: Balance a -> [a] #

null :: Balance a -> Bool #

length :: Balance a -> Int #

elem :: Eq a => a -> Balance a -> Bool #

maximum :: Ord a => Balance a -> a #

minimum :: Ord a => Balance a -> a #

sum :: Num a => Balance a -> a #

product :: Num a => Balance a -> a #

Traversable Balance Source # 

Methods

traverse :: Applicative f => (a -> f b) -> Balance a -> f (Balance b) #

sequenceA :: Applicative f => Balance (f a) -> f (Balance a) #

mapM :: Monad m => (a -> m b) -> Balance a -> m (Balance b) #

sequence :: Monad m => Balance (m a) -> m (Balance a) #

Indexable Balance Source # 

Methods

index :: Balance a -> Key Balance -> a #

Lookup Balance Source # 

Methods

lookup :: Key Balance -> Balance a -> Maybe a #

Adjustable Balance Source # 

Methods

adjust :: (a -> a) -> Key Balance -> Balance a -> Balance a #

replace :: Key Balance -> a -> Balance a -> Balance a #

Additive Balance Source # 

Methods

zero :: Num a => Balance a #

(^+^) :: Num a => Balance a -> Balance a -> Balance a #

(^-^) :: Num a => Balance a -> Balance a -> Balance a #

lerp :: Num a => a -> Balance a -> Balance a -> Balance a #

liftU2 :: (a -> a -> a) -> Balance a -> Balance a -> Balance a #

liftI2 :: (a -> b -> c) -> Balance a -> Balance b -> Balance c #

Apply Balance Source # 

Methods

(<.>) :: Balance (a -> b) -> Balance a -> Balance b #

(.>) :: Balance a -> Balance b -> Balance b #

(<.) :: Balance a -> Balance b -> Balance a #

Bind Balance Source # 

Methods

(>>-) :: Balance a -> (a -> Balance b) -> Balance b #

join :: Balance (Balance a) -> Balance a #

FunctorWithIndex Int Balance Source # 

Methods

imap :: (Int -> a -> b) -> Balance a -> Balance b #

imapped :: (Indexable Int p, Settable f) => p a (f b) -> Balance a -> f (Balance b) #

FoldableWithIndex Int Balance Source # 

Methods

ifoldMap :: Monoid m => (Int -> a -> m) -> Balance a -> m #

ifolded :: (Indexable Int p, Contravariant f, Applicative f) => p a (f a) -> Balance a -> f (Balance a) #

ifoldr :: (Int -> a -> b -> b) -> b -> Balance a -> b #

ifoldl :: (Int -> b -> a -> b) -> b -> Balance a -> b #

ifoldr' :: (Int -> a -> b -> b) -> b -> Balance a -> b #

ifoldl' :: (Int -> b -> a -> b) -> b -> Balance a -> b #

TraversableWithIndex Int Balance Source # 

Methods

itraverse :: Applicative f => (Int -> a -> f b) -> Balance a -> f (Balance b) #

itraversed :: (Indexable Int p, Applicative f) => p a (f b) -> Balance a -> f (Balance b) #

Eq a => Eq (Balance a) Source # 

Methods

(==) :: Balance a -> Balance a -> Bool #

(/=) :: Balance a -> Balance a -> Bool #

Data a => Data (Balance a) Source # 

Methods

gfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b) -> (forall g. g -> c g) -> Balance a -> c (Balance a) #

gunfold :: (forall b r. Data b => c (b -> r) -> c r) -> (forall r. r -> c r) -> Constr -> c (Balance a) #

toConstr :: Balance a -> Constr #

dataTypeOf :: Balance a -> DataType #

dataCast1 :: Typeable (* -> *) t => (forall d. Data d => c (t d)) -> Maybe (c (Balance a)) #

dataCast2 :: Typeable (* -> * -> *) t => (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c (Balance a)) #

gmapT :: (forall b. Data b => b -> b) -> Balance a -> Balance a #

gmapQl :: (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> Balance a -> r #

gmapQr :: (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> Balance a -> r #

gmapQ :: (forall d. Data d => d -> u) -> Balance a -> [u] #

gmapQi :: Int -> (forall d. Data d => d -> u) -> Balance a -> u #

gmapM :: Monad m => (forall d. Data d => d -> m d) -> Balance a -> m (Balance a) #

gmapMp :: MonadPlus m => (forall d. Data d => d -> m d) -> Balance a -> m (Balance a) #

gmapMo :: MonadPlus m => (forall d. Data d => d -> m d) -> Balance a -> m (Balance a) #

Ord a => Ord (Balance a) Source # 

Methods

compare :: Balance a -> Balance a -> Ordering #

(<) :: Balance a -> Balance a -> Bool #

(<=) :: Balance a -> Balance a -> Bool #

(>) :: Balance a -> Balance a -> Bool #

(>=) :: Balance a -> Balance a -> Bool #

max :: Balance a -> Balance a -> Balance a #

min :: Balance a -> Balance a -> Balance a #

Read a => Read (Balance a) Source # 
Show a => Show (Balance a) Source # 

Methods

showsPrec :: Int -> Balance a -> ShowS #

show :: Balance a -> String #

showList :: [Balance a] -> ShowS #

Num a => Semigroup (Balance a) Source # 

Methods

(<>) :: Balance a -> Balance a -> Balance a #

sconcat :: NonEmpty (Balance a) -> Balance a #

stimes :: Integral b => b -> Balance a -> Balance a #

Num a => Monoid (Balance a) Source # 

Methods

mempty :: Balance a #

mappend :: Balance a -> Balance a -> Balance a #

mconcat :: [Balance a] -> Balance a #

type Key Balance Source # 
type Key Balance = Key
type Index (Balance a) Source # 
type Index (Balance a) = Int
type IxValue (Balance a) Source # 
type IxValue (Balance a) = a

insert :: Int -> a -> Balance a -> Balance a Source #

balanceStore :: Indexable f => Key f -> f a -> Store (Key f) a Source #