packages feed

associative 0.0.2 → 0.0.3

raw patch · 7 files changed

+55/−20 lines, 7 filesPVP ok

version bump matches the API change (PVP)

API changes (from Hackage documentation)

+ Data.Associative.PartialMonoidOp: nonPartialMonoid :: forall a a' p f. (Profunctor p, Functor f) => p (MonoidOp a) (f (MonoidOp a')) -> p (PartialSemigroupOpT (Const a :: Type -> Type) a a, a) (f (PartialSemigroupOpT (Const a' :: Type -> Type) a' a', a'))
+ Data.Associative.PartialSemigroupOp: nonPartialSemigroup :: forall b a b' a' p f. (Profunctor p, Functor f) => p (SemigroupOp a b) (f (SemigroupOp a' b')) -> p (PartialSemigroupOpT (Const b :: Type -> Type) a b) (f (PartialSemigroupOpT (Const b' :: Type -> Type) a' b'))

Files

associative.cabal view
@@ -1,6 +1,6 @@ cabal-version:        2.4 name:                 associative-version:              0.0.2+version:              0.0.3 synopsis:             Partial Semigroup and Semigroup operations description:          Partial Semigroup and Semigroup operations: Associative, Closed, Binary operation which may not be defined for all domains license:              BSD-3-Clause
changelog.md view
@@ -1,3 +1,10 @@+0.0.3++* New `nonPartialSemigroup` isomorphism witnessing that `PartialSemigroupOpT (Const b) a b` is isomorphic to `SemigroupOp a b`+* New `nonPartialMonoid` isomorphism converting between `(PartialSemigroupOpT (Const a) a a, a)` and `MonoidOp a`+* Fixed name-shadowing warning in `psemigroupLawAssociative`+* Qualified all imports, ormolu formatting+ 0.0.2  * Wrapper values (`semigroupMaybe`, `semigroupDual`, `semigroupDown`, `semigroupIdentity`, `semigroupTuple`, `semigroupWrappedMonoid`, `semigroupFunction`, and their `psemigroup`/`monoid`/`pmonoid` counterparts) now take an explicit `SemigroupOp'` or `MonoidOp` parameter instead of using `Semigroup`/`Monoid` class constraints
src/Data/Associative.hs view
@@ -221,9 +221,10 @@ -- * @monoidLawAssociative@ / @pmonoidLawAssociative@ -- associativity of the binary operation -- -- * @monoidLawLeftIdentity@ / @pmonoidLawLeftIdentity@, @monoidLawRightIdentity@ / @pmonoidLawRightIdentity@ -- identity element laws-module Data.Associative (-  module A-) where+module Data.Associative+  ( module A,+  )+where  import Data.Associative.MonoidOp as A import Data.Associative.PartialMonoidOp as A
src/Data/Associative/MonoidOp.hs view
@@ -78,7 +78,7 @@     iso,     lens,   )-import Data.Associative.SemigroupOp (HasSemigroupOpT (..), SemigroupOp', op, runSemigroupOp, semigroupDual, semigroupDown, semigroupFunction, semigroupIdentity, semigroupLiftA2, semigroupMaybe, semigroupTuple, semigroupWrappedMonoid)+import Data.Associative.SemigroupOp (HasSemigroupOpT (..), SemigroupOp', op, runSemigroupOp, semigroupDown, semigroupDual, semigroupFunction, semigroupIdentity, semigroupLiftA2, semigroupMaybe, semigroupTuple, semigroupWrappedMonoid) import qualified Data.Associative.SemigroupOp as SG (semigroupSemigroup) import Data.Bits (Bits, FiniteBits, complement, xor, zeroBits, (.&.), (.|.)) import Data.Functor.Alt (Alt (..))
src/Data/Associative/PartialMonoidOp.hs view
@@ -13,6 +13,7 @@      -- * Isomorphism     iPartialMonoidOp,+    nonPartialMonoid,      -- * Running     runPartialMonoidOp,@@ -78,27 +79,31 @@     iso,     lens,     review,+    view,   ) import Data.Associative.MonoidOp (MonoidOp (..)) import Data.Associative.PartialSemigroupOp   ( HasPartialSemigroupOpT (..),     PartialSemigroupOp',+    PartialSemigroupOpT,     iPartialSemigroupOp,+    nonPartialSemigroup,     psemigroupDown,     psemigroupDual,     psemigroupFunction,     psemigroupIdentity,     psemigroupLiftA2,     psemigroupMaybe,+    psemigroupSemigroup,     psemigroupTuple,     psemigroupWrappedMonoid,     runPartialSemigroupOp,-    psemigroupSemigroup,     total,   ) import Data.Associative.SemigroupOp (SemigroupOp') import Data.Bits (Bits, FiniteBits, complement, xor, zeroBits, (.&.), (.|.)) import Data.Functor.Alt (Alt (..))+import Data.Functor.Const (Const) import Data.Functor.Identity (Identity (..)) import Data.HashMap.Strict (HashMap) import qualified Data.HashMap.Strict as HashMap@@ -161,6 +166,13 @@     (\(PartialMonoidOp s e) -> (runPartialSemigroupOp s, e))     (\(f, e) -> PartialMonoidOp (review iPartialSemigroupOp f) e) {-# INLINE iPartialMonoidOp #-}++nonPartialMonoid :: Iso (PartialSemigroupOpT (Const a) a a, a) (PartialSemigroupOpT (Const a') a' a', a') (MonoidOp a) (MonoidOp a')+nonPartialMonoid =+  iso+    (\(s, e) -> MonoidOp (view nonPartialSemigroup s) e)+    (\(MonoidOp s e) -> (review nonPartialSemigroup s, e))+{-# INLINE nonPartialMonoid #-}  -- | Extract the partial binary operation and run it. --
src/Data/Associative/PartialSemigroupOp.hs view
@@ -21,6 +21,7 @@     -- * Isomorphisms     iPartialSemigroupOpT,     iPartialSemigroupOp,+    nonPartialSemigroup,      -- * Running     runPartialSemigroupOpT,@@ -125,10 +126,12 @@ import Control.Monad.State.Class (MonadState (..)) import Control.Monad.Writer.Class (MonadWriter (..)) import Control.Selective (Selective (..), selectM)+import Data.Associative.SemigroupOp (SemigroupOp, SemigroupOp', op, runSemigroupOp) import Data.Bits (Bits, FiniteBits, complement, xor, (.&.), (.|.)) import Data.Functor.Alt (Alt (..)) import Data.Functor.Apply (Apply (..), liftF2) import Data.Functor.Bind (Bind (..))+import Data.Functor.Const (Const (..)) import Data.Functor.Extend (Extend (..)) import Data.Functor.Identity (Identity (..)) import Data.Functor.Plus (Plus (..))@@ -148,7 +151,6 @@ import Data.Profunctor (Choice (..), Profunctor (..), Strong (..)) import Data.Proxy (Proxy) import Data.Semigroup (Dual (..), WrappedMonoid (..))-import Data.Associative.SemigroupOp (SemigroupOp', runSemigroupOp) import Data.Semigroupoid (Semigroupoid (..)) import Data.Set (Set) import qualified Data.Set as Set@@ -223,6 +225,13 @@     (\k -> PartialSemigroupOpT (\a1 a2 -> Identity (k a1 a2))) {-# INLINE iPartialSemigroupOp #-} +nonPartialSemigroup :: Iso (PartialSemigroupOpT (Const b) a b) (PartialSemigroupOpT (Const b') a' b') (SemigroupOp a b) (SemigroupOp a' b')+nonPartialSemigroup =+  iso+    (\k -> op (\a1 a2 -> getConst (runPartialSemigroupOpT k a1 a2)))+    (\k -> totalT (\a1 a2 -> Const (runSemigroupOp k a1 a2)))+{-# INLINE nonPartialSemigroup #-}+ -- | Unwrap a 'PartialSemigroupOpT' to its underlying function. -- -- >>> runPartialSemigroupOpT addPos 3 4@@ -545,15 +554,15 @@ -- >>> runIdentity $ psemigroupLawAssociative addPos (-1) 2 3 -- True psemigroupLawAssociative :: (Monad f, Eq a) => PartialSemigroupOpT' f a -> a -> a -> a -> f Bool-psemigroupLawAssociative (PartialSemigroupOpT op) x y z = do-  mxy <- op x y+psemigroupLawAssociative (PartialSemigroupOpT f) x y z = do+  mxy <- f x y   lhs <- case mxy of     Nothing -> pure Nothing-    Just xy -> op xy z-  myz <- op y z+    Just xy -> f xy z+  myz <- f y z   rhs <- case myz of     Nothing -> pure Nothing-    Just yz -> op x yz+    Just yz -> f x yz   pure (lhs == rhs)  -- | 'Semigroup' associativity: @(p '<>' q) '<>' r == p '<>' (q '<>' r)@@@ -731,10 +740,13 @@ -- >>> run (psemigroupMaybe cat) (Just [1 :: Int]) Nothing -- Just (Just [1]) psemigroupMaybe :: SemigroupOp' a -> PartialSemigroupOp' (Maybe a)-psemigroupMaybe s = total (\mx my -> case (mx, my) of-  (Nothing, y) -> y-  (x, Nothing) -> x-  (Just x, Just y) -> Just (runSemigroupOp s x y))+psemigroupMaybe s =+  total+    ( \mx my -> case (mx, my) of+        (Nothing, y) -> y+        (x, Nothing) -> x+        (Just x, Just y) -> Just (runSemigroupOp s x y)+    )  -- | Reverses the inner semigroup. --
src/Data/Associative/SemigroupOp.hs view
@@ -621,10 +621,13 @@ -- >>> run (semigroupMaybe cat) (Just [1 :: Int]) Nothing -- Just [1] semigroupMaybe :: SemigroupOp' a -> SemigroupOp' (Maybe a)-semigroupMaybe s = op (\mx my -> case (mx, my) of-  (Nothing, y) -> y-  (x, Nothing) -> x-  (Just x, Just y) -> Just (runSemigroupOp s x y))+semigroupMaybe s =+  op+    ( \mx my -> case (mx, my) of+        (Nothing, y) -> y+        (x, Nothing) -> x+        (Just x, Just y) -> Just (runSemigroupOp s x y)+    )  -- | First-success on 'Maybe' via 'Alt'. --