packages feed

currency 0.1.0.0 → 0.2.0.0

raw patch · 2 files changed

+32/−2 lines, 2 filesdep +containersPVP ok

version bump matches the API change (PVP)

Dependencies added: containers

API changes (from Hackage documentation)

+ Currency.Rates: Rates :: a -> Map a b -> Rates a b
+ Currency.Rates: data Rates a b
+ Currency.Rates: exchangeRate :: (Ord a, Fractional b) => Rates a b -> a -> a -> Maybe b
+ Currency.Rates: instance (Eq a, Eq b) => Eq (Rates a b)
+ Currency.Rates: instance (Ord a, Read a, Read b) => Read (Rates a b)
+ Currency.Rates: instance (Show a, Show b) => Show (Rates a b)
+ Currency.Rates: rates :: Rates a b -> Map a b
+ Currency.Rates: rebase :: (Ord a, Fractional b) => a -> Rates a b -> Rates a b
+ Currency.Rates: reference :: Rates a b -> a

Files

+ Currency/Rates.hs view
@@ -0,0 +1,28 @@+module Currency.Rates where++import Prelude hiding (lookup)+import Data.Map (Map, empty, lookup, insert)++-- | A map from currency to exchange rate against some reference currency+data Rates a b = Rates {+		reference :: a,+		rates :: Map a b+	} deriving (Show, Read, Eq)++-- | Change the reference currency to a different one found in the 'Map'+rebase :: (Ord a, Fractional b) => a -> Rates a b -> Rates a b+rebase new rs@(Rates old m)+	| new == old = rs+	| otherwise = Rates new $ maybe empty+		(\newRate -> fmap (/newRate) $ insert old 1 m) $+		lookup new m++-- | Convenience function for getting a single exchange rate+--+-- If you're doing a lot of conversions, use 'rebase' and 'lookup'+exchangeRate :: (Ord a, Fractional b) =>+	Rates a b+	-> a -- ^ Source currency+	-> a -- ^ Target currency+	-> Maybe b+exchangeRate rs source target = lookup target $ rates (rebase source rs)
currency.cabal view
@@ -1,5 +1,5 @@ name:            currency-version:         0.1.0.0+version:         0.2.0.0 cabal-version:   >=1.8 license:         OtherLicense license-file:     COPYING@@ -26,10 +26,12 @@  library         exposed-modules:-                Currency+                Currency,+                Currency.Rates          build-depends:                 base == 4.*,+                containers,                 hashable,                 iso3166-country-codes >= 0.20111111