commutative 0.0.1.4 → 0.0.2
raw patch · 5 files changed
+86/−51 lines, 5 filesdep +commutativedep +vectordep ~basePVP: major bump suggested
API removals or changes: PVP suggests a major version bump
Dependencies added: commutative, vector
Dependency ranges changed: base
API changes (from Hackage documentation)
- Data.Commutative: instance Data.Commutative.Commutative Data.Monoid.All
- Data.Commutative: instance Data.Commutative.Commutative Data.Monoid.Any
- Data.Commutative: instance Data.Commutative.CommutativeId Data.Monoid.All
- Data.Commutative: instance Data.Commutative.CommutativeId Data.Monoid.Any
- Data.Commutative: instance GHC.Num.Num a => Data.Commutative.Commutative (Data.Monoid.Product a)
- Data.Commutative: instance GHC.Num.Num a => Data.Commutative.Commutative (Data.Monoid.Sum a)
- Data.Commutative: instance GHC.Num.Num a => Data.Commutative.CommutativeId (Data.Monoid.Product a)
- Data.Commutative: instance GHC.Num.Num a => Data.Commutative.CommutativeId (Data.Monoid.Sum a)
- Data.Mergeable: instance Data.Mergeable.Mergeable1 Data.List.NonEmpty.NonEmpty
+ Data.Commutative: instance Data.Commutative.Commutative Data.Semigroup.Internal.All
+ Data.Commutative: instance Data.Commutative.Commutative Data.Semigroup.Internal.Any
+ Data.Commutative: instance Data.Commutative.CommutativeId Data.Semigroup.Internal.All
+ Data.Commutative: instance Data.Commutative.CommutativeId Data.Semigroup.Internal.Any
+ Data.Commutative: instance GHC.Num.Num a => Data.Commutative.Commutative (Data.Semigroup.Internal.Product a)
+ Data.Commutative: instance GHC.Num.Num a => Data.Commutative.Commutative (Data.Semigroup.Internal.Sum a)
+ Data.Commutative: instance GHC.Num.Num a => Data.Commutative.CommutativeId (Data.Semigroup.Internal.Product a)
+ Data.Commutative: instance GHC.Num.Num a => Data.Commutative.CommutativeId (Data.Semigroup.Internal.Sum a)
+ Data.Mergeable: instance Data.Mergeable.Mergeable Data.Vector.Vector
+ Data.Mergeable: instance Data.Mergeable.Mergeable1 GHC.Base.NonEmpty
- Data.Mergeable: class Mergeable t where mergeMap f = merge (commute . f) cempty merge f i xs = appCommEndo (mergeMap (CommEndo . f) xs) i
+ Data.Mergeable: class Mergeable t
- Data.Mergeable: class Functor t => Mergeable1 t where mergeMap1 f = merge1 . fmap f merge1 = mergeMap1 id
+ Data.Mergeable: class Functor t => Mergeable1 t
Files
- README.md +9/−0
- commutative.cabal +62/−43
- src/Data/Commutative.hs +1/−0
- src/Data/Mergeable.hs +6/−0
- test/Data/CommutativeSpec.hs +8/−8
+ README.md view
@@ -0,0 +1,9 @@+commutative+===========++> Semantics for commutative operations in Haskell++## Idea++There isn't a class for commutative binary operations, and this is a joke attempt+at making one.
commutative.cabal view
@@ -1,46 +1,65 @@-Name: commutative-Version: 0.0.1.4-Author: Athan Clark <athan.clark@gmail.com>-Maintainer: Athan Clark <athan.clark@gmail.com>-License: MIT-License-File: LICENSE-Synopsis: Commutative binary operations.-Description:- This package provides a trivial class for abelian binary operations, and an- analogue to @Data.Foldable@.-Cabal-Version: >= 1.10-Build-Type: Simple-Category: Data, Math+cabal-version: 1.12 -Library- Default-Language: Haskell2010- HS-Source-Dirs: src- GHC-Options: -Wall- Exposed-Modules: Data.Commutative- Data.Mergeable- Build-Depends: base >= 4.6 && < 5- , random- , semigroups+-- This file has been generated from package.yaml by hpack version 0.31.0.+--+-- see: https://github.com/sol/hpack+--+-- hash: 8f796930aa20ab766d806a86a390a5cd89ed619ac06011638f5e905c7fb1df3f -Test-Suite spec- Type: exitcode-stdio-1.0- Default-Language: Haskell2010- Hs-Source-Dirs: src- , test- Ghc-Options: -Wall- Main-Is: Main.hs- Other-Modules: Data.Commutative- Data.CommutativeSpec- Data.Mergeable- Build-Depends: base- , tasty- , tasty-quickcheck- , tasty-hunit- , QuickCheck- , quickcheck-instances- , random- , semigroups+name: commutative+version: 0.0.2+synopsis: Commutative binary operations.+description: Please see the README on Github at <https://github.com/athanclark/commutative#readme>+category: Data+homepage: https://github.com/athanclark/commutative#readme+bug-reports: https://github.com/athanclark/commutative/issues+author: Athan Clark+maintainer: athan.clark@localcooking.com+copyright: 2018 Athan Clark+license: BSD3+license-file: LICENSE+build-type: Simple+extra-source-files:+ README.md -Source-Repository head- Type: git- Location: https://github.com/athanclark/commutative.git+source-repository head+ type: git+ location: https://github.com/athanclark/commutative++library+ exposed-modules:+ Data.Commutative+ Data.Mergeable+ other-modules:+ Paths_commutative+ hs-source-dirs:+ src+ ghc-options: -Wall+ build-depends:+ base >=4.11 && <5.0+ , random+ , semigroups+ , vector+ default-language: Haskell2010++test-suite sets-test+ type: exitcode-stdio-1.0+ main-is: Main.hs+ other-modules:+ Data.CommutativeSpec+ Paths_commutative+ hs-source-dirs:+ test+ ghc-options: -Wall -threaded -rtsopts -Wall -with-rtsopts=-N+ build-depends:+ QuickCheck+ , base >=4.11 && <5.0+ , commutative+ , quickcheck-instances+ , random+ , semigroups+ , tasty+ , tasty-hunit+ , tasty-quickcheck+ , vector+ default-language: Haskell2010
src/Data/Commutative.hs view
@@ -15,6 +15,7 @@ import Control.Applicative import System.IO.Unsafe (unsafePerformIO) import System.Random (randomIO)+import qualified Data.Vector as Vector class Commutative a where
src/Data/Mergeable.hs view
@@ -7,6 +7,7 @@ import Data.Commutative import Data.List.NonEmpty as NE+import qualified Data.Vector as Vector class Mergeable t where@@ -19,6 +20,11 @@ instance Mergeable [] where mergeMap _ [] = cempty mergeMap f (x:xs) = f x <~> mergeMap f xs++instance Mergeable Vector.Vector where+ mergeMap f xss+ | Vector.null xss = cempty+ | otherwise = f (Vector.head xss) <~> mergeMap f (Vector.drop 1 xss) class Functor t => Mergeable1 t where
test/Data/CommutativeSpec.hs view
@@ -56,20 +56,20 @@ instance Arbitrary a => Arbitrary (Under5 a) where arbitrary = Under5 <$> arbitrary `suchThat` (\x -> length x < 5) -instance Arbitrary Any where- arbitrary = Any <$> arbitrary+-- instance Arbitrary Any where+-- arbitrary = Any <$> arbitrary -instance Arbitrary All where- arbitrary = All <$> arbitrary+-- instance Arbitrary All where+-- arbitrary = All <$> arbitrary instance Arbitrary a => Arbitrary (OneOf a) where arbitrary = OneOf <$> arbitrary -instance Arbitrary a => Arbitrary (Sum a) where- arbitrary = Sum <$> arbitrary+-- instance Arbitrary a => Arbitrary (Sum a) where+-- arbitrary = Sum <$> arbitrary -instance Arbitrary a => Arbitrary (Product a) where- arbitrary = Product <$> arbitrary+-- instance Arbitrary a => Arbitrary (Product a) where+-- arbitrary = Product <$> arbitrary equal :: (Eq a, Foldable f) => f a -> Bool equal = maybe True snd