packages feed

reducers 0.1 → 0.1.1

raw patch · 4 files changed

+27/−10 lines, 4 filesdep +comonaddep +keysdep +pointed

Dependencies added: comonad, keys, pointed

Files

Data/Semigroup/Applicative.hs view
@@ -19,7 +19,6 @@     ) where  import Control.Applicative-import Control.Monad (void) import Data.Monoid (Monoid(..)) import Data.Semigroup (Semigroup(..)) import Data.Semigroup.Reducer (Reducer(..))@@ -37,9 +36,9 @@   Traversal a `mappend` Traversal b = Traversal (a *> b)  instance Applicative f => Reducer (f a) (Traversal f) where-  unit = Traversal . void+  unit = Traversal . (() <$)   a `cons` Traversal b = Traversal (a *> b)-  Traversal a `snoc` b = Traversal (void (a *> b))+  Traversal a `snoc` b = Traversal (() <$ (a *> b))  -- | Efficiently avoid needlessly rebinding when using 'snoc' on an action that already returns () --   A rewrite rule automatically applies this when possible
Data/Semigroup/Apply.hs view
@@ -18,7 +18,7 @@     , App(..)     ) where -import Control.Monad (void)+import Data.Functor import Data.Functor.Apply import Data.Semigroup (Semigroup(..)) import Data.Semigroup.Reducer (Reducer(..))@@ -32,9 +32,9 @@   Trav a <> Trav b = Trav (a .> b)  instance Apply f => Reducer (f a) (Trav f) where-    unit = Trav . void+    unit = Trav . (() <$)     a `cons` Trav b = Trav (a .> b)-    Trav a `snoc` b = Trav (void (a .> b))+    Trav a `snoc` b = Trav (() <$ (a .> b))  -- | Efficiently avoid needlessly rebinding when using 'snoc' on an action that already returns () --   A rewrite rule automatically applies this when possible
Data/Semigroup/Reducer.hs view
@@ -14,12 +14,12 @@ -----------------------------------------------------------------------------  module Data.Semigroup.Reducer-    ( Reducer-    , unit, snoc, cons+    ( Reducer(..)     , foldMapReduce, foldMapReduce1     , foldReduce, foldReduce1     , pureUnit     , returnUnit+    , Count(..)     ) where  import Control.Applicative@@ -92,6 +92,21 @@ pureUnit :: (Applicative f, Reducer c n) => c -> f n pureUnit = pure . unit +newtype Count = Count { getCount :: Int } deriving (Eq,Ord,Show,Read)++instance Semigroup Count where+  Count a <> Count b = Count (a + b)+  replicate1p n (Count a) = Count $ (fromIntegral n + 1) * a++instance Monoid Count where+  mempty = Count 0+  Count a `mappend` Count b = Count (a + b)++instance Reducer a Count where+  unit _ = Count 1+  Count n `snoc` _ = Count (n + 1)+  _ `cons` Count n = Count (n + 1)+   instance (Reducer c m, Reducer c n) => Reducer c (m,n) where   unit x = (unit x,unit x)   (m,n) `snoc` x = (m `snoc` x, n `snoc` x)
reducers.cabal view
@@ -1,6 +1,6 @@ name:          reducers category:      Data, Math, Numerical, Semigroups-version:       0.1+version:       0.1.1 license:       BSD3 cabal-version: >= 1.6 license-file:  LICENSE@@ -30,7 +30,10 @@     parallel               >= 3.1      && < 3.2,     unordered-containers   >= 0.1.4    && < 0.2,     semigroups             >= 0.7.1    && < 0.8,-    semigroupoids          >= 1.2.2.4  && < 1.3+    semigroupoids          >= 1.2.2.4  && < 1.3,+    comonad                >= 1.1.1    && < 1.2,+    pointed                >= 2.0      && < 2.1,+    keys                   >= 2.0      && < 2.1    exposed-modules:     Data.Generator