monoid-subclasses 0.4.4 → 0.4.5
raw patch · 8 files changed
+58/−27 lines, 8 filesdep ~base
Dependency ranges changed: base
Files
- CHANGELOG.md +5/−1
- Data/Monoid/Instances/ByteString/UTF8.hs +6/−1
- Data/Monoid/Instances/Concat.hs +9/−5
- Data/Monoid/Instances/Measured.hs +5/−1
- Data/Monoid/Instances/Positioned.hs +19/−10
- Data/Monoid/Instances/Stateful.hs +8/−3
- Test/TestMonoidSubclasses.hs +2/−2
- monoid-subclasses.cabal +4/−4
CHANGELOG.md view
@@ -1,4 +1,8 @@ +Version 0.4.5+---------------+Added the Semigroup instances to fix the compilation errors with base-4.11+ Version 0.4.4 --------------- Fixed boundary condition bugs in ByteStringUTF8 uncovered by a new version of QuickCheck@@ -71,7 +75,7 @@ Version 0.3.4.1 ----------------Accomodating the text-1.0 release+Accommodating the text-1.0 release * Introduced the function ByteStringUTF8.decode * Removed the utf-string dependency
Data/Monoid/Instances/ByteString/UTF8.hs view
@@ -1,5 +1,5 @@ {- - Copyright 2013-2016 Mario Blazevic+ Copyright 2013-2018 Mario Blazevic License: BSD3 (see BSD3-LICENSE.txt file) -}@@ -53,6 +53,7 @@ import Data.ByteString.Internal (w2c) import Data.ByteString.Unsafe (unsafeDrop, unsafeHead, unsafeTail, unsafeTake, unsafeIndex) +import Data.Semigroup -- (Semigroup(..)) import Data.Monoid -- (Monoid(mempty, mappend)) import Data.Monoid.Cancellative (LeftReductiveMonoid(..), LeftCancellativeMonoid, LeftGCDMonoid(..)) import Data.Monoid.Null (MonoidNull(..), PositiveMonoid)@@ -79,6 +80,10 @@ Just{} -> (ByteStringUTF8 bs, mempty) where (prefix, suffix) = ByteString.breakEnd byteStartsCharacter bs l = ByteString.last bs++instance Semigroup ByteStringUTF8 where+ ByteStringUTF8 a <> ByteStringUTF8 b = ByteStringUTF8 (a <> b)+ {-# INLINE (<>) #-} instance Monoid ByteStringUTF8 where mempty = ByteStringUTF8 ByteString.empty
Data/Monoid/Instances/Concat.hs view
@@ -1,5 +1,5 @@ {- - Copyright 2013-2016 Mario Blazevic+ Copyright 2013-2018 Mario Blazevic License: BSD3 (see BSD3-LICENSE.txt file) -}@@ -19,7 +19,8 @@ import qualified Data.Foldable as Foldable import qualified Data.List as List import Data.String (IsString(..))-import Data.Monoid -- (Monoid(..), (<>), First(..), Sum(..))+import Data.Semigroup (Semigroup(..))+import Data.Monoid -- (Monoid(..), First(..), Sum(..)) import Data.Monoid.Cancellative (LeftReductiveMonoid(..), RightReductiveMonoid(..), LeftGCDMonoid(..), RightGCDMonoid(..)) import Data.Monoid.Null (MonoidNull(null), PositiveMonoid)@@ -87,12 +88,15 @@ foldr' f a (Leaf x) = f x a foldr' f a (x :<> y) = let a' = Foldable.foldr' f a y in Foldable.foldr' f a' x -instance PositiveMonoid a => Monoid (Concat a) where- mempty = Leaf mempty- mappend x y +instance PositiveMonoid a => Semigroup (Concat a) where+ x <> y | null x = y | null y = x | otherwise = x :<> y++instance PositiveMonoid a => Monoid (Concat a) where+ mempty = Leaf mempty+ mappend = (<>) instance PositiveMonoid a => MonoidNull (Concat a) where null (Leaf x) = null x
Data/Monoid/Instances/Measured.hs view
@@ -1,5 +1,5 @@ {- - Copyright 2013-2015 Mario Blazevic+ Copyright 2013-2018 Mario Blazevic License: BSD3 (see BSD3-LICENSE.txt file) -}@@ -17,6 +17,7 @@ import Data.Functor -- ((<$>)) import qualified Data.List as List import Data.String (IsString(..))+import Data.Semigroup -- (Semigroup(..)) import Data.Monoid -- (Monoid(..)) import Data.Monoid.Cancellative (LeftReductiveMonoid(..), RightReductiveMonoid(..), LeftGCDMonoid(..), RightGCDMonoid(..))@@ -41,6 +42,9 @@ instance Ord a => Ord (Measured a) where compare (Measured _ x) (Measured _ y) = compare x y++instance StableFactorialMonoid a => Semigroup (Measured a) where+ Measured m a <> Measured n b = Measured (m + n) (mappend a b) instance StableFactorialMonoid a => Monoid (Measured a) where mempty = Measured 0 mempty
Data/Monoid/Instances/Positioned.hs view
@@ -1,5 +1,5 @@ {-- Copyright 2014-2015 Mario Blazevic+ Copyright 2014-2018 Mario Blazevic License: BSD3 (see BSD3-LICENSE.txt file) -}@@ -29,7 +29,8 @@ import qualified Data.List as List import Data.String (IsString(..)) -import Data.Monoid -- (Monoid(..), (<>), Endo(..))+import Data.Semigroup -- (Semigroup(..))+import Data.Monoid -- (Monoid(..), Endo(..)) import Data.Monoid.Cancellative (LeftReductiveMonoid(..), RightReductiveMonoid(..), LeftGCDMonoid(..), RightGCDMonoid(..)) import Data.Monoid.Null (MonoidNull(null), PositiveMonoid) import Data.Monoid.Factorial (FactorialMonoid(..), StableFactorialMonoid)@@ -99,16 +100,13 @@ showsPrec prec (LinePositioned pos l lpos c) = ("Line " ++) . shows l . (", column " ++) . shows (pos - lpos) . (": " ++) . showsPrec prec c -instance StableFactorialMonoid m => Monoid (OffsetPositioned m) where- mempty = pure mempty- mappend (OffsetPositioned p1 c1) (OffsetPositioned p2 c2) =+instance StableFactorialMonoid m => Semigroup (OffsetPositioned m) where+ OffsetPositioned p1 c1 <> OffsetPositioned p2 c2 = OffsetPositioned (if p1 /= 0 || p2 == 0 then p1 else max 0 $ p2 - length c1) (mappend c1 c2)- {-# INLINE mempty #-}- {-# INLINE mappend #-}+ {-# INLINE (<>) #-} -instance (StableFactorialMonoid m, TextualMonoid m) => Monoid (LinePositioned m) where- mempty = pure mempty- mappend (LinePositioned p1 l1 lp1 c1) (LinePositioned p2 l2 lp2 c2)+instance (StableFactorialMonoid m, TextualMonoid m) => Semigroup (LinePositioned m) where+ LinePositioned p1 l1 lp1 c1 <> LinePositioned p2 l2 lp2 c2 | p1 /= 0 || p2 == 0 = LinePositioned p1 l1 lp1 c | otherwise = LinePositioned p2' l2' lp2' c where c = mappend c1 c2@@ -118,6 +116,17 @@ countLines :: Int -> Char -> Int countLines n '\n' = succ n countLines n _ = n+ {-# INLINE (<>) #-}++instance StableFactorialMonoid m => Monoid (OffsetPositioned m) where+ mempty = pure mempty+ mappend = (<>)+ {-# INLINE mempty #-}+ {-# INLINE mappend #-}++instance (StableFactorialMonoid m, TextualMonoid m) => Monoid (LinePositioned m) where+ mempty = pure mempty+ mappend = (<>) {-# INLINE mempty #-} {-# INLINE mappend #-}
Data/Monoid/Instances/Stateful.hs view
@@ -1,5 +1,5 @@ {-- Copyright 2013-2015 Mario Blazevic+ Copyright 2013-2018 Mario Blazevic License: BSD3 (see BSD3-LICENSE.txt file) -}@@ -23,7 +23,8 @@ import Data.Functor -- ((<$>)) import qualified Data.List as List import Data.String (IsString(..))-import Data.Monoid -- (Monoid(..), (<>))+import Data.Semigroup -- (Semigroup(..))+import Data.Monoid -- (Monoid(..)) import Data.Monoid.Cancellative (LeftReductiveMonoid(..), LeftGCDMonoid(..), RightReductiveMonoid(..), RightGCDMonoid(..)) import Data.Monoid.Null (MonoidNull(null), PositiveMonoid) import Data.Monoid.Factorial (FactorialMonoid(..), StableFactorialMonoid)@@ -55,9 +56,13 @@ pure m = Stateful (m, mempty) Stateful (f, s1) <*> Stateful (x, s2) = Stateful (f x, s1 <> s2) +instance (Semigroup a, Semigroup b) => Semigroup (Stateful a b) where+ Stateful x <> Stateful y = Stateful (x <> y)+ {-# INLINE (<>) #-}+ instance (Monoid a, Monoid b) => Monoid (Stateful a b) where mempty = Stateful mempty- mappend (Stateful x) (Stateful y) = Stateful (x <> y)+ mappend = (<>) {-# INLINE mempty #-} {-# INLINE mappend #-}
Test/TestMonoidSubclasses.hs view
@@ -1,5 +1,5 @@ {- - Copyright 2013-2017 Mario Blazevic+ Copyright 2013-2018 Mario Blazevic License: BSD3 (see BSD3-LICENSE.txt file) -}@@ -757,7 +757,7 @@ textualFactors = map characterize . factors where characterize prime = maybe (Left prime) Right (Textual.characterPrefix prime) -newtype TestString = TestString String deriving (Eq, Show, Arbitrary, CoArbitrary, +newtype TestString = TestString String deriving (Eq, Show, Arbitrary, CoArbitrary, Semigroup, Monoid, LeftReductiveMonoid, LeftCancellativeMonoid, LeftGCDMonoid, MonoidNull, PositiveMonoid, StableFactorialMonoid, IsString)
monoid-subclasses.cabal view
@@ -1,5 +1,5 @@ Name: monoid-subclasses-Version: 0.4.4+Version: 0.4.5 Cabal-Version: >= 1.10 Build-Type: Simple Synopsis: Subclasses of Monoid@@ -11,7 +11,7 @@ License: BSD3 License-file: BSD3-LICENSE.txt-Copyright: (c) 2013-2017 Mario Blažević+Copyright: (c) 2013-2018 Mario Blažević Author: Mario Blažević Maintainer: Mario Blažević <blamario@protonmail.com> Homepage: https://github.com/blamario/monoid-subclasses/@@ -25,7 +25,7 @@ Exposed-Modules: Data.Monoid.Cancellative, Data.Monoid.Factorial, Data.Monoid.Null, Data.Monoid.Textual, Data.Monoid.Instances.ByteString.UTF8, Data.Monoid.Instances.Concat, Data.Monoid.Instances.Measured, Data.Monoid.Instances.Positioned, Data.Monoid.Instances.Stateful- Build-Depends: base >= 4.5 && < 5,+ Build-Depends: base >= 4.9 && < 5, bytestring >= 0.9 && < 1.0, containers >= 0.5.7.0 && < 0.6, text >= 0.11 && < 1.3, primes == 0.2.*, vector >= 0.9 && < 0.13 GHC-options: -Wall@@ -33,7 +33,7 @@ test-suite Main Type: exitcode-stdio-1.0- Build-Depends: base >= 4.5 && < 5,+ Build-Depends: base >= 4.9 && < 5, bytestring >= 0.9 && < 1.0, containers >= 0.5.7.0 && < 0.6, text >= 0.11 && < 1.3, vector >= 0.9 && < 0.13, primes == 0.2.*, QuickCheck >= 2.9 && < 3, quickcheck-instances >= 0.3.12 && <0.4,