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 +28/−0
- currency.cabal +4/−2
+ 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