packages feed

commodities 0.1.0 → 0.2.0

raw patch · 5 files changed

+49/−34 lines, 5 filesdep +comonaddep −comonad-transformersdep −representable-functorsdep ~lensdep ~semigroupoids

Dependencies added: comonad

Dependencies removed: comonad-transformers, representable-functors

Dependency ranges changed: lens, semigroupoids

Files

Ledger/Balance.hs view
@@ -5,6 +5,7 @@ {-# LANGUAGE FlexibleInstances #-} {-# LANGUAGE MultiParamTypeClasses #-} {-# LANGUAGE OverloadedStrings #-}+{-# LANGUAGE PackageImports #-} {-# LANGUAGE RankNTypes #-} {-# LANGUAGE TemplateHaskell #-} {-# LANGUAGE TypeFamilies #-}@@ -22,7 +23,7 @@     ) where  import           Control.Applicative-import           Control.Comonad.Trans.Store+import "comonad" Control.Comonad.Trans.Store import           Control.Lens hiding (from, to) import qualified Control.Lens.Internal as Lens import           Control.Monad hiding (forM)
Ledger/Commodity/Parse.hs view
@@ -1,9 +1,12 @@+{-# LANGUAGE FlexibleContexts #-}+{-# LANGUAGE PackageImports #-}+ module Ledger.Commodity.Parse where -import Control.Monad.Trans.State-import Data.Text-import Ledger.Balance-import Ledger.Commodity+import "mtl" Control.Monad.State.Class+import       Data.Text.Lazy+import       Ledger.Balance+import       Ledger.Commodity -parseAmount :: Text -> State CommodityMap (Balance a)-parseAmount _str = undefined+parseBalance :: MonadState CommodityMap m => Text -> m (Balance a)+parseBalance _str = undefined
Ledger/Commodity/Print.hs view
@@ -1,38 +1,50 @@ {-# LANGUAGE FlexibleContexts #-}+{-# LANGUAGE ImpredicativeTypes #-} {-# LANGUAGE OverloadedStrings #-}-{-# LANGUAGE RecordWildCards #-}+{-# LANGUAGE PackageImports #-} -module Ledger.Commodity.Print where+module Ledger.Commodity.Print+    ( printBalance+    , balance+    ) where  import           Control.Applicative import           Control.Lens-import           Control.Monad.Reader.Class+import "mtl"     Control.Monad.Reader.Class+import           Control.Monad.Trans.Reader (runReader)+import           Control.Monad.Trans.State (evalState) import           Control.Monad.Trans.Writer import qualified Data.IntMap.Strict as IntMap+import           Data.Maybe (fromMaybe) import           Data.Text.Lazy import           Data.Text.Lazy.Builder import           Ledger.Balance import           Ledger.Commodity+import           Ledger.Commodity.Parse -printAmount :: (MonadReader CommodityMap m, Functor m, Show a)-            => Balance a-            -> m Text-printAmount Zero = return "0"-printAmount (Plain x) = return $ pack (show x)-printAmount x = toLazyText <$> execWriterT (buildAmount x)+printBalance :: (MonadReader CommodityMap m, Functor m, Show a)+             => Balance a+             -> m Text+printBalance Zero = return "0"+printBalance (Plain x) = return $ pack (show x)+printBalance x = toLazyText <$> execWriterT (buildBalance x) -buildAmount :: (MonadReader CommodityMap m, Show a)-            => Balance a-            -> WriterT Builder m ()-buildAmount (Amount c q) = do+buildBalance :: (MonadReader CommodityMap m, Show a)+             => Balance a+             -> WriterT Builder m ()+buildBalance (Amount c q) = do     mcomm <- view (commodities.at c)-    case mcomm of-        Nothing -> error "Attempted to print an unknown commodity"-        Just comm -> do-            tell $ fromText (comm^.commSymbol)-            tell $ fromString (show q)+    let comm = fromMaybe defaultCommodityInfo mcomm+    tell $ fromText (comm^.commSymbol)+    tell $ fromString (show q) -buildAmount (Balance xs) =-    mapM_ (buildAmount . uncurry Amount) $ IntMap.toList xs+buildBalance (Balance xs) =+    mapM_ (buildBalance . uncurry Amount) $ IntMap.toList xs -buildAmount _ = return ()+buildBalance _ = return ()++balance :: Show a => CommodityMap -> Iso' (Balance a) Text+balance pool = iso toBalance fromBalance+  where+    toBalance   = flip runReader pool . printBalance+    fromBalance = flip evalState pool . parseBalance
commodities.cabal view
@@ -1,5 +1,5 @@ Name:          commodities-Version:       0.1.0+Version:       0.2.0 Synopsis:      Library for working with commoditized amounts and price histories Description:   Library for working with commoditized amounts and price histories License-file:  LICENSE@@ -26,17 +26,16 @@     build-depends:         base                   >= 3 && < 5       , PSQueue-      , comonad-transformers   >= 3.0.1+      , comonad                >= 4.0       , containers             >= 0.4       , distributive           >= 0.3       , keys                   >= 3.0.2-      , lens                   >= 3.7+      , lens                   >= 3.10       , linear                 >= 0.7       , mtl       , numbers                >= 2009.8.9-      , representable-functors >= 3.0.1       , semigroups-      , semigroupoids          >= 3.0.2+      , semigroupoids          >= 4.0       , text                   >= 0.11.2       , thyme       , transformers
test/doctests.hs view
@@ -16,7 +16,7 @@   : sources  getSources :: IO [FilePath]-getSources = filter (\x -> ".hs" `isSuffixOf` x) <$> go "src"+getSources = filter (\x -> ".hs" `isSuffixOf` x) <$> go "Ledger"   where     go dir = do       (dirs, files) <- getFilesAndDirectories dir