packages feed

algebra 4.3 → 4.3.1

raw patch · 4 files changed

+126/−72 lines, 4 filesdep ~basedep ~containersdep ~mtlPVP: major bump suggested

API removals or changes: PVP suggests a major version bump

Dependency ranges changed: base, containers, mtl, semigroupoids, transformers

API changes (from Hackage documentation)

- Numeric.Algebra.Class: instance (Numeric.Algebra.Class.Semiring r, GHC.Classes.Ord a) => Numeric.Algebra.Class.Algebra r (Data.Set.Base.Set a)
- Numeric.Algebra.Class: instance (Numeric.Algebra.Class.Semiring r, GHC.Classes.Ord a) => Numeric.Algebra.Class.Coalgebra r (Data.Set.Base.Set a)
- Numeric.Algebra.Class: instance (Numeric.Algebra.Class.Semiring r, GHC.Classes.Ord a, Numeric.Additive.Class.Additive b) => Numeric.Algebra.Class.Coalgebra r (Data.Map.Base.Map a b)
- Numeric.Algebra.Class: instance (Numeric.Algebra.Class.Semiring r, Numeric.Additive.Class.Additive b) => Numeric.Algebra.Class.Coalgebra r (Data.IntMap.Base.IntMap b)
- Numeric.Algebra.Class: instance Numeric.Algebra.Class.Semiring r => Numeric.Algebra.Class.Algebra r (Data.Sequence.Seq a)
- Numeric.Algebra.Class: instance Numeric.Algebra.Class.Semiring r => Numeric.Algebra.Class.Algebra r Data.IntSet.Base.IntSet
- Numeric.Algebra.Class: instance Numeric.Algebra.Class.Semiring r => Numeric.Algebra.Class.Coalgebra r (Data.Sequence.Seq a)
- Numeric.Algebra.Class: instance Numeric.Algebra.Class.Semiring r => Numeric.Algebra.Class.Coalgebra r Data.IntSet.Base.IntSet
- Numeric.Algebra.Commutative: instance (Numeric.Algebra.Commutative.Commutative r, Numeric.Algebra.Class.Semiring r) => Numeric.Algebra.Commutative.CocommutativeCoalgebra r Data.IntSet.Base.IntSet
- Numeric.Algebra.Commutative: instance (Numeric.Algebra.Commutative.Commutative r, Numeric.Algebra.Class.Semiring r) => Numeric.Algebra.Commutative.CommutativeAlgebra r Data.IntSet.Base.IntSet
- Numeric.Algebra.Commutative: instance (Numeric.Algebra.Commutative.Commutative r, Numeric.Algebra.Class.Semiring r, GHC.Classes.Ord a) => Numeric.Algebra.Commutative.CocommutativeCoalgebra r (Data.Set.Base.Set a)
- Numeric.Algebra.Commutative: instance (Numeric.Algebra.Commutative.Commutative r, Numeric.Algebra.Class.Semiring r, GHC.Classes.Ord a) => Numeric.Algebra.Commutative.CommutativeAlgebra r (Data.Set.Base.Set a)
- Numeric.Algebra.Commutative: instance (Numeric.Algebra.Commutative.Commutative r, Numeric.Algebra.Class.Semiring r, GHC.Classes.Ord a, Numeric.Additive.Class.Abelian b) => Numeric.Algebra.Commutative.CocommutativeCoalgebra r (Data.Map.Base.Map a b)
- Numeric.Algebra.Commutative: instance (Numeric.Algebra.Commutative.Commutative r, Numeric.Algebra.Class.Semiring r, Numeric.Additive.Class.Abelian b) => Numeric.Algebra.Commutative.CocommutativeCoalgebra r (Data.IntMap.Base.IntMap b)
- Numeric.Algebra.Idempotent: instance (Numeric.Algebra.Class.Semiring r, Numeric.Algebra.Idempotent.Band r) => Numeric.Algebra.Idempotent.IdempotentAlgebra r Data.IntSet.Base.IntSet
- Numeric.Algebra.Idempotent: instance (Numeric.Algebra.Class.Semiring r, Numeric.Algebra.Idempotent.Band r) => Numeric.Algebra.Idempotent.IdempotentCoalgebra r Data.IntSet.Base.IntSet
- Numeric.Algebra.Idempotent: instance (Numeric.Algebra.Class.Semiring r, Numeric.Algebra.Idempotent.Band r, GHC.Classes.Ord a) => Numeric.Algebra.Idempotent.IdempotentAlgebra r (Data.Set.Base.Set a)
- Numeric.Algebra.Idempotent: instance (Numeric.Algebra.Class.Semiring r, Numeric.Algebra.Idempotent.Band r, GHC.Classes.Ord c) => Numeric.Algebra.Idempotent.IdempotentCoalgebra r (Data.Set.Base.Set c)
- Numeric.Algebra.Unital: instance (Numeric.Algebra.Class.Monoidal r, Numeric.Algebra.Class.Semiring r) => Numeric.Algebra.Unital.Bialgebra r (Data.Sequence.Seq a)
- Numeric.Algebra.Unital: instance (Numeric.Algebra.Class.Monoidal r, Numeric.Algebra.Class.Semiring r) => Numeric.Algebra.Unital.UnitalAlgebra r (Data.Sequence.Seq a)
- Numeric.Algebra.Unital: instance Numeric.Algebra.Class.Semiring r => Numeric.Algebra.Unital.CounitalCoalgebra r (Data.Sequence.Seq a)
- Numeric.Order.Class: instance GHC.Classes.Ord a => Numeric.Order.Class.Order (Data.Set.Base.Set a)
- Numeric.Order.LocallyFinite: instance GHC.Classes.Ord a => Numeric.Order.LocallyFinite.LocallyFiniteOrder (Data.Set.Base.Set a)
+ Numeric.Algebra.Class: instance (Numeric.Algebra.Class.Semiring r, GHC.Classes.Ord a) => Numeric.Algebra.Class.Algebra r (Data.Set.Internal.Set a)
+ Numeric.Algebra.Class: instance (Numeric.Algebra.Class.Semiring r, GHC.Classes.Ord a) => Numeric.Algebra.Class.Coalgebra r (Data.Set.Internal.Set a)
+ Numeric.Algebra.Class: instance (Numeric.Algebra.Class.Semiring r, GHC.Classes.Ord a, Numeric.Additive.Class.Additive b) => Numeric.Algebra.Class.Coalgebra r (Data.Map.Internal.Map a b)
+ Numeric.Algebra.Class: instance (Numeric.Algebra.Class.Semiring r, Numeric.Additive.Class.Additive b) => Numeric.Algebra.Class.Coalgebra r (Data.IntMap.Internal.IntMap b)
+ Numeric.Algebra.Class: instance Numeric.Algebra.Class.Semiring r => Numeric.Algebra.Class.Algebra r (Data.Sequence.Internal.Seq a)
+ Numeric.Algebra.Class: instance Numeric.Algebra.Class.Semiring r => Numeric.Algebra.Class.Algebra r Data.IntSet.Internal.IntSet
+ Numeric.Algebra.Class: instance Numeric.Algebra.Class.Semiring r => Numeric.Algebra.Class.Coalgebra r (Data.Sequence.Internal.Seq a)
+ Numeric.Algebra.Class: instance Numeric.Algebra.Class.Semiring r => Numeric.Algebra.Class.Coalgebra r Data.IntSet.Internal.IntSet
+ Numeric.Algebra.Commutative: instance (Numeric.Algebra.Commutative.Commutative r, Numeric.Algebra.Class.Semiring r) => Numeric.Algebra.Commutative.CocommutativeCoalgebra r Data.IntSet.Internal.IntSet
+ Numeric.Algebra.Commutative: instance (Numeric.Algebra.Commutative.Commutative r, Numeric.Algebra.Class.Semiring r) => Numeric.Algebra.Commutative.CommutativeAlgebra r Data.IntSet.Internal.IntSet
+ Numeric.Algebra.Commutative: instance (Numeric.Algebra.Commutative.Commutative r, Numeric.Algebra.Class.Semiring r, GHC.Classes.Ord a) => Numeric.Algebra.Commutative.CocommutativeCoalgebra r (Data.Set.Internal.Set a)
+ Numeric.Algebra.Commutative: instance (Numeric.Algebra.Commutative.Commutative r, Numeric.Algebra.Class.Semiring r, GHC.Classes.Ord a) => Numeric.Algebra.Commutative.CommutativeAlgebra r (Data.Set.Internal.Set a)
+ Numeric.Algebra.Commutative: instance (Numeric.Algebra.Commutative.Commutative r, Numeric.Algebra.Class.Semiring r, GHC.Classes.Ord a, Numeric.Additive.Class.Abelian b) => Numeric.Algebra.Commutative.CocommutativeCoalgebra r (Data.Map.Internal.Map a b)
+ Numeric.Algebra.Commutative: instance (Numeric.Algebra.Commutative.Commutative r, Numeric.Algebra.Class.Semiring r, Numeric.Additive.Class.Abelian b) => Numeric.Algebra.Commutative.CocommutativeCoalgebra r (Data.IntMap.Internal.IntMap b)
+ Numeric.Algebra.Idempotent: instance (Numeric.Algebra.Class.Semiring r, Numeric.Algebra.Idempotent.Band r) => Numeric.Algebra.Idempotent.IdempotentAlgebra r Data.IntSet.Internal.IntSet
+ Numeric.Algebra.Idempotent: instance (Numeric.Algebra.Class.Semiring r, Numeric.Algebra.Idempotent.Band r) => Numeric.Algebra.Idempotent.IdempotentCoalgebra r Data.IntSet.Internal.IntSet
+ Numeric.Algebra.Idempotent: instance (Numeric.Algebra.Class.Semiring r, Numeric.Algebra.Idempotent.Band r, GHC.Classes.Ord a) => Numeric.Algebra.Idempotent.IdempotentAlgebra r (Data.Set.Internal.Set a)
+ Numeric.Algebra.Idempotent: instance (Numeric.Algebra.Class.Semiring r, Numeric.Algebra.Idempotent.Band r, GHC.Classes.Ord c) => Numeric.Algebra.Idempotent.IdempotentCoalgebra r (Data.Set.Internal.Set c)
+ Numeric.Algebra.Unital: instance (Numeric.Algebra.Class.Monoidal r, Numeric.Algebra.Class.Semiring r) => Numeric.Algebra.Unital.Bialgebra r (Data.Sequence.Internal.Seq a)
+ Numeric.Algebra.Unital: instance (Numeric.Algebra.Class.Monoidal r, Numeric.Algebra.Class.Semiring r) => Numeric.Algebra.Unital.UnitalAlgebra r (Data.Sequence.Internal.Seq a)
+ Numeric.Algebra.Unital: instance Numeric.Algebra.Class.Semiring r => Numeric.Algebra.Unital.CounitalCoalgebra r (Data.Sequence.Internal.Seq a)
+ Numeric.Order.Class: instance GHC.Classes.Ord a => Numeric.Order.Class.Order (Data.Set.Internal.Set a)
+ Numeric.Order.LocallyFinite: instance GHC.Classes.Ord a => Numeric.Order.LocallyFinite.LocallyFiniteOrder (Data.Set.Internal.Set a)
+ Numeric.Ring.Endomorphism: instance Data.Semigroup.Semigroup (Numeric.Ring.Endomorphism.End r)
- Numeric.Additive.Class: class Additive r where sinnum1p y0 x0 = f x0 (1 + y0) where f x y | even y = f (x + x) (y `quot` 2) | y == 1 = x | otherwise = g (x + x) (pred y `quot` 2) x g x y z | even y = g (x + x) (y `quot` 2) z | y == 1 = x + z | otherwise = g (x + x) (pred y `quot` 2) (x + z) sumWith1 f = maybe (error "Numeric.Additive.Semigroup.sumWith1: empty structure") id . foldl' mf Nothing where mf Nothing y = Just $! f y mf (Just x) y = Just $! x + f y
+ Numeric.Additive.Class: class Additive r
- Numeric.Additive.Group: class (LeftModule Integer r, RightModule Integer r, Monoidal r) => Group r where times y0 x0 = case compare y0 0 of { LT -> f (negate x0) (negate y0) EQ -> zero GT -> f x0 y0 } where f x y | even y = f (x + x) (y `quot` 2) | y == 1 = x | otherwise = g (x + x) ((y - 1) `quot` 2) x g x y z | even y = g (x + x) (y `quot` 2) z | y == 1 = x + z | otherwise = g (x + x) ((y - 1) `quot` 2) (x + z) negate a = zero - a a - b = a + negate b subtract a b = negate a + b
+ Numeric.Additive.Group: class (LeftModule Integer r, RightModule Integer r, Monoidal r) => Group r
- Numeric.Algebra: class Additive r where sinnum1p y0 x0 = f x0 (1 + y0) where f x y | even y = f (x + x) (y `quot` 2) | y == 1 = x | otherwise = g (x + x) (pred y `quot` 2) x g x y z | even y = g (x + x) (y `quot` 2) z | y == 1 = x + z | otherwise = g (x + x) (pred y `quot` 2) (x + z) sumWith1 f = maybe (error "Numeric.Additive.Semigroup.sumWith1: empty structure") id . foldl' mf Nothing where mf Nothing y = Just $! f y mf (Just x) y = Just $! x + f y
+ Numeric.Algebra: class Additive r
- Numeric.Algebra: class Unital r => DecidableUnits r where isUnit = isJust . recipUnit x0 ^? y0 = case compare y0 0 of { LT -> fmap (`f` negate y0) (recipUnit x0) EQ -> Just one GT -> Just (f x0 y0) } where f x y | even y = f (x * x) (y `quot` 2) | y == 1 = x | otherwise = g (x * x) ((y - 1) `quot` 2) x g x y z | even y = g (x * x) (y `quot` 2) z | y == 1 = x * z | otherwise = g (x * x) ((y - 1) `quot` 2) (x * z)
+ Numeric.Algebra: class Unital r => DecidableUnits r
- Numeric.Algebra: class Unital r => Division r where recip a = one / a a / b = a * recip b a \\ b = recip a * b x0 ^ y0 = case compare y0 0 of { LT -> f (recip x0) (negate y0) EQ -> one GT -> f x0 y0 } where f x y | even y = f (x * x) (y `quot` 2) | y == 1 = x | otherwise = g (x * x) ((y - 1) `quot` 2) x g x y z | even y = g (x * x) (y `quot` 2) z | y == 1 = x * z | otherwise = g (x * x) ((y - 1) `quot` 2) (x * z)
+ Numeric.Algebra: class Unital r => Division r
- Numeric.Algebra: class (LeftModule Integer r, RightModule Integer r, Monoidal r) => Group r where times y0 x0 = case compare y0 0 of { LT -> f (negate x0) (negate y0) EQ -> zero GT -> f x0 y0 } where f x y | even y = f (x + x) (y `quot` 2) | y == 1 = x | otherwise = g (x + x) ((y - 1) `quot` 2) x g x y z | even y = g (x + x) (y `quot` 2) z | y == 1 = x + z | otherwise = g (x + x) ((y - 1) `quot` 2) (x + z) negate a = zero - a a - b = a + negate b subtract a b = negate a + b
+ Numeric.Algebra: class (LeftModule Integer r, RightModule Integer r, Monoidal r) => Group r
- Numeric.Algebra: class Order a => LocallyFiniteOrder a where moebiusInversion x y = case order x y of { Just EQ -> one Just LT -> sumWith (\ z -> if z < y then moebiusInversion x z else zero) $ range x y _ -> zero }
+ Numeric.Algebra: class Order a => LocallyFiniteOrder a
- Numeric.Algebra: class (LeftModule Natural m, RightModule Natural m) => Monoidal m where sinnum 0 _ = zero sinnum n x0 = f x0 n where f x y | even y = f (x + x) (y `quot` 2) | y == 1 = x | otherwise = g (x + x) (pred y `quot` 2) x g x y z | even y = g (x + x) (y `quot` 2) z | y == 1 = x + z | otherwise = g (x + x) (pred y `quot` 2) (x + z) sumWith f = foldl' (\ b a -> b + f a) zero
+ Numeric.Algebra: class (LeftModule Natural m, RightModule Natural m) => Monoidal m
- Numeric.Algebra: class Multiplicative r where pow1p x0 y0 = f x0 (y0 + 1) where f x y | even y = f (x * x) (y `quot` 2) | y == 1 = x | otherwise = g (x * x) ((y - 1) `quot` 2) x g x y z | even y = g (x * x) (y `quot` 2) z | y == 1 = x * z | otherwise = g (x * x) ((y - 1) `quot` 2) (x * z) productWith1 f = maybe (error "Numeric.Multiplicative.Semigroup.productWith1: empty structure") id . foldl' mf Nothing where mf Nothing y = Just $! f y mf (Just x) y = Just $! x * f y
+ Numeric.Algebra: class Multiplicative r
- Numeric.Algebra: class Order a where a <~ b = maybe False (<= EQ) (order a b) a < b = order a b == Just LT a >~ b = b <~ a a > b = order a b == Just GT a ~~ b = order a b == Just EQ a /~ b = order a b /= Just EQ order a b | a <~ b = Just $ if b <~ a then EQ else LT | b <~ a = Just GT | otherwise = Nothing comparable a b = maybe False (const True) (order a b)
+ Numeric.Algebra: class Order a
- Numeric.Algebra: class (Semiring r, Unital r, Monoidal r) => Rig r where fromNatural n = sinnum n one
+ Numeric.Algebra: class (Semiring r, Unital r, Monoidal r) => Rig r
- Numeric.Algebra: class (Rig r, Rng r) => Ring r where fromInteger n = times n one
+ Numeric.Algebra: class (Rig r, Rng r) => Ring r
- Numeric.Algebra: class Multiplicative r => Unital r where pow _ 0 = one pow x0 y0 = f x0 y0 where f x y | even y = f (x * x) (y `quot` 2) | y == 1 = x | otherwise = g (x * x) ((y - 1) `quot` 2) x g x y z | even y = g (x * x) (y `quot` 2) z | y == 1 = x * z | otherwise = g (x * x) ((y - 1) `quot` 2) (x * z) productWith f = foldl' (\ b a -> b * f a) one
+ Numeric.Algebra: class Multiplicative r => Unital r
- Numeric.Algebra.Class: class (LeftModule Natural m, RightModule Natural m) => Monoidal m where sinnum 0 _ = zero sinnum n x0 = f x0 n where f x y | even y = f (x + x) (y `quot` 2) | y == 1 = x | otherwise = g (x + x) (pred y `quot` 2) x g x y z | even y = g (x + x) (y `quot` 2) z | y == 1 = x + z | otherwise = g (x + x) (pred y `quot` 2) (x + z) sumWith f = foldl' (\ b a -> b + f a) zero
+ Numeric.Algebra.Class: class (LeftModule Natural m, RightModule Natural m) => Monoidal m
- Numeric.Algebra.Class: class Multiplicative r where pow1p x0 y0 = f x0 (y0 + 1) where f x y | even y = f (x * x) (y `quot` 2) | y == 1 = x | otherwise = g (x * x) ((y - 1) `quot` 2) x g x y z | even y = g (x * x) (y `quot` 2) z | y == 1 = x * z | otherwise = g (x * x) ((y - 1) `quot` 2) (x * z) productWith1 f = maybe (error "Numeric.Multiplicative.Semigroup.productWith1: empty structure") id . foldl' mf Nothing where mf Nothing y = Just $! f y mf (Just x) y = Just $! x * f y
+ Numeric.Algebra.Class: class Multiplicative r
- Numeric.Algebra.Division: class Unital r => Division r where recip a = one / a a / b = a * recip b a \\ b = recip a * b x0 ^ y0 = case compare y0 0 of { LT -> f (recip x0) (negate y0) EQ -> one GT -> f x0 y0 } where f x y | even y = f (x * x) (y `quot` 2) | y == 1 = x | otherwise = g (x * x) ((y - 1) `quot` 2) x g x y z | even y = g (x * x) (y `quot` 2) z | y == 1 = x * z | otherwise = g (x * x) ((y - 1) `quot` 2) (x * z)
+ Numeric.Algebra.Division: class Unital r => Division r
- Numeric.Algebra.Unital: class Multiplicative r => Unital r where pow _ 0 = one pow x0 y0 = f x0 y0 where f x y | even y = f (x * x) (y `quot` 2) | y == 1 = x | otherwise = g (x * x) ((y - 1) `quot` 2) x g x y z | even y = g (x * x) (y `quot` 2) z | y == 1 = x * z | otherwise = g (x * x) ((y - 1) `quot` 2) (x * z) productWith f = foldl' (\ b a -> b * f a) one
+ Numeric.Algebra.Unital: class Multiplicative r => Unital r
- Numeric.Algebra.Unital.UnitNormalForm: class (DecidableUnits r, DecidableAssociates r) => UnitNormalForm r where splitUnit x | isZero x = (one, zero) | otherwise = (x, one)
+ Numeric.Algebra.Unital.UnitNormalForm: class (DecidableUnits r, DecidableAssociates r) => UnitNormalForm r
- Numeric.Decidable.Units: class Unital r => DecidableUnits r where isUnit = isJust . recipUnit x0 ^? y0 = case compare y0 0 of { LT -> fmap (`f` negate y0) (recipUnit x0) EQ -> Just one GT -> Just (f x0 y0) } where f x y | even y = f (x * x) (y `quot` 2) | y == 1 = x | otherwise = g (x * x) ((y - 1) `quot` 2) x g x y z | even y = g (x * x) (y `quot` 2) z | y == 1 = x * z | otherwise = g (x * x) ((y - 1) `quot` 2) (x * z)
+ Numeric.Decidable.Units: class Unital r => DecidableUnits r
- Numeric.Domain.Euclidean: class (PID d) => Euclidean d where degree a | isZero a = Nothing | otherwise = Just zero divide a b = let q = a / b in (q, seq q zero) quot a b = fst $ a `divide` b rem a b = snd $ a `divide` b
+ Numeric.Domain.Euclidean: class (PID d) => Euclidean d
- Numeric.Domain.Euclidean: degree :: (Euclidean d, Division d) => d -> Maybe Natural
+ Numeric.Domain.Euclidean: degree :: (Euclidean d, (Division d)) => d -> Maybe Natural
- Numeric.Domain.Euclidean: divide :: (Euclidean d, Division d) => d -> d -> (d, d)
+ Numeric.Domain.Euclidean: divide :: (Euclidean d, (Division d)) => d -> d -> (d, d)
- Numeric.Domain.GCD: class (IntegralDomain d, UnitNormalForm d, DecidableZero d) => GCDDomain d where gcd a b = let (r, _, _) = egcd a b in r reduceFraction a b = let c = gcd a b in (fromJust (a `maybeQuot` c), fromJust (b `maybeQuot` c)) lcm p q = fromJust $ (p * q) `maybeQuot` (gcd p q)
+ Numeric.Domain.GCD: class (IntegralDomain d, UnitNormalForm d, DecidableZero d) => GCDDomain d
- Numeric.Domain.GCD: gcd :: (GCDDomain d, PID d) => d -> d -> d
+ Numeric.Domain.GCD: gcd :: (GCDDomain d, (PID d)) => d -> d -> d
- Numeric.Domain.Integral: class (Domain d, Commutative d) => IntegralDomain d where m `divides` n | isZero m = False | otherwise = isZero (n `rem` m) m `maybeQuot` n | isZero n = Nothing | otherwise = let (q, r) = m `divide` n in if isZero r then Just q else Nothing
+ Numeric.Domain.Integral: class (Domain d, Commutative d) => IntegralDomain d
- Numeric.Domain.Integral: divides :: (IntegralDomain d, Euclidean d) => d -> d -> Bool
+ Numeric.Domain.Integral: divides :: (IntegralDomain d, (Euclidean d)) => d -> d -> Bool
- Numeric.Domain.Integral: maybeQuot :: (IntegralDomain d, Euclidean d) => d -> d -> Maybe d
+ Numeric.Domain.Integral: maybeQuot :: (IntegralDomain d, (Euclidean d)) => d -> d -> Maybe d
- Numeric.Domain.PID: class (UFD d) => PID d where egcd a b = head (euclid a b)
+ Numeric.Domain.PID: class (UFD d) => PID d
- Numeric.Domain.PID: egcd :: (PID d, Euclidean d) => d -> d -> (d, d, d)
+ Numeric.Domain.PID: egcd :: (PID d, (Euclidean d)) => d -> d -> (d, d, d)
- Numeric.Order.Class: class Order a where a <~ b = maybe False (<= EQ) (order a b) a < b = order a b == Just LT a >~ b = b <~ a a > b = order a b == Just GT a ~~ b = order a b == Just EQ a /~ b = order a b /= Just EQ order a b | a <~ b = Just $ if b <~ a then EQ else LT | b <~ a = Just GT | otherwise = Nothing comparable a b = maybe False (const True) (order a b)
+ Numeric.Order.Class: class Order a
- Numeric.Order.LocallyFinite: class Order a => LocallyFiniteOrder a where moebiusInversion x y = case order x y of { Just EQ -> one Just LT -> sumWith (\ z -> if z < y then moebiusInversion x z else zero) $ range x y _ -> zero }
+ Numeric.Order.LocallyFinite: class Order a => LocallyFiniteOrder a
- Numeric.Partial.Group: class PartialMonoid a => PartialGroup a where pnegate = pminus pzero pminus a b = padd a =<< pnegate b psubtract a b = pnegate a >>= (`padd` b)
+ Numeric.Partial.Group: class PartialMonoid a => PartialGroup a
- Numeric.Rig.Class: class (Semiring r, Unital r, Monoidal r) => Rig r where fromNatural n = sinnum n one
+ Numeric.Rig.Class: class (Semiring r, Unital r, Monoidal r) => Rig r
- Numeric.Ring.Class: class (Rig r, Rng r) => Ring r where fromInteger n = times n one
+ Numeric.Ring.Class: class (Rig r, Rng r) => Ring r

Files

.travis.yml view
@@ -1,98 +1,141 @@+# This Travis job script has been generated by a script via+#+#   make_travis_yml_2.hs 'algebra.cabal'+#+# For more information, see https://github.com/hvr/multi-ghc-travis+# language: c sudo: false +git:+  submodules: false  # whether to recursively clone submodules+ cache:   directories:-    - $HOME/.cabsnap     - $HOME/.cabal/packages+    - $HOME/.cabal/store  before_cache:   - rm -fv $HOME/.cabal/packages/hackage.haskell.org/build-reports.log-  - rm -fv $HOME/.cabal/packages/hackage.haskell.org/00-index.tar+  # remove files that are regenerated by 'cabal update'+  - rm -fv $HOME/.cabal/packages/hackage.haskell.org/00-index.*+  - rm -fv $HOME/.cabal/packages/hackage.haskell.org/*.json+  - rm -fv $HOME/.cabal/packages/hackage.haskell.org/01-index.cache+  - rm -fv $HOME/.cabal/packages/hackage.haskell.org/01-index.tar+  - rm -fv $HOME/.cabal/packages/hackage.haskell.org/01-index.tar.idx +  - rm -fv $HOME/.cabal/packages/head.hackage+ matrix:   include:-    - env: CABALVER=1.24 GHCVER=7.4.2-      compiler: ": #GHC 7.4.2"-      addons: {apt: {packages: [cabal-install-1.24,ghc-7.4.2,alex-3.1.4,happy-1.19.5], sources: [hvr-ghc]}}-    - env: CABALVER=1.24 GHCVER=7.6.3-      compiler: ": #GHC 7.6.3"-      addons: {apt: {packages: [cabal-install-1.24,ghc-7.6.3,alex-3.1.4,happy-1.19.5], sources: [hvr-ghc]}}-    - env: CABALVER=1.18 GHCVER=7.8.4-      compiler: ": #GHC 7.8.4"-      addons: {apt: {packages: [cabal-install-1.18,ghc-7.8.4,alex-3.1.4,happy-1.19.5], sources: [hvr-ghc]}}-    - env: CABALVER=1.22 GHCVER=7.10.3-      compiler: ": #GHC 7.10.3"-      addons: {apt: {packages: [cabal-install-1.22,ghc-7.10.3,alex-3.1.4,happy-1.19.5], sources: [hvr-ghc]}}-    - env: CABALVER=1.24 GHCVER=8.0.1-      compiler: ": #GHC 8.0.1"-      addons: {apt: {packages: [cabal-install-1.24,ghc-8.0.1,alex-3.1.4,happy-1.19.5], sources: [hvr-ghc]}}-    - env: CABALVER=1.24 GHCVER=head-      compiler: ": #GHC head"-      addons: {apt: {packages: [cabal-install-1.24,ghc-head,alex-3.1.4,happy-1.19.5], sources: [hvr-ghc]}}+    - compiler: "ghc-7.4.2"+      addons: {apt: {packages: [ghc-ppa-tools,cabal-install-head,ghc-7.4.2], sources: [hvr-ghc]}}+    - compiler: "ghc-7.6.3"+      addons: {apt: {packages: [ghc-ppa-tools,cabal-install-head,ghc-7.6.3], sources: [hvr-ghc]}}+    - compiler: "ghc-7.8.4"+      addons: {apt: {packages: [ghc-ppa-tools,cabal-install-head,ghc-7.8.4], sources: [hvr-ghc]}}+    - compiler: "ghc-7.10.3"+      addons: {apt: {packages: [ghc-ppa-tools,cabal-install-head,ghc-7.10.3], sources: [hvr-ghc]}}+    - compiler: "ghc-8.0.1"+      addons: {apt: {packages: [ghc-ppa-tools,cabal-install-head,ghc-8.0.1], sources: [hvr-ghc]}}+    - compiler: "ghc-8.0.2"+      addons: {apt: {packages: [ghc-ppa-tools,cabal-install-head,ghc-8.0.2], sources: [hvr-ghc]}}+    - compiler: "ghc-8.2.1"+      addons: {apt: {packages: [ghc-ppa-tools,cabal-install-head,ghc-8.2.1], sources: [hvr-ghc]}}+    - compiler: "ghc-8.2.2"+      addons: {apt: {packages: [ghc-ppa-tools,cabal-install-head,ghc-8.2.2], sources: [hvr-ghc]}}+    - compiler: "ghc-8.4.1"+      env: GHCHEAD=true+      addons: {apt: {packages: [ghc-ppa-tools,cabal-install-head,ghc-8.4.1], sources: [hvr-ghc]}}+    - compiler: "ghc-head"+      env: GHCHEAD=true+      addons: {apt: {packages: [ghc-ppa-tools,cabal-install-head,ghc-head], sources: [hvr-ghc]}}    allow_failures:-    - env: CABALVER=1.24 GHCVER=head+    - compiler: "ghc-8.4.1"+    - compiler: "ghc-head"  before_install:- - unset CC- - export HAPPYVER=1.19.5- - export ALEXVER=3.1.4- - export PATH=~/.cabal/bin:/opt/ghc/$GHCVER/bin:/opt/cabal/$CABALVER/bin:/opt/happy/$HAPPYVER/bin:/opt/alex/$ALEXVER/bin:$PATH+  - HC=${CC}+  - HCPKG=${HC/ghc/ghc-pkg}+  - unset CC+  - "PATH=/opt/ghc/bin:/opt/ghc-ppa-tools/bin:$PATH"  install:- - cabal --version- - echo "$(ghc --version) [$(ghc --print-project-git-commit-id 2> /dev/null || echo '?')]"- - if [ -f $HOME/.cabal/packages/hackage.haskell.org/00-index.tar.gz ];-   then-     zcat $HOME/.cabal/packages/hackage.haskell.org/00-index.tar.gz >-          $HOME/.cabal/packages/hackage.haskell.org/00-index.tar;-   fi- - travis_retry cabal update- - "sed -i  's/^jobs:.*$/jobs: 2/' $HOME/.cabal/config"- - cabal install --only-dependencies --enable-tests --enable-benchmarks --dry -v > installplan.txt- - sed -i -e '1,/^Resolving /d' installplan.txt; cat installplan.txt--# check whether current requested install-plan matches cached package-db snapshot- - if diff -u installplan.txt $HOME/.cabsnap/installplan.txt;-   then-     echo "cabal build-cache HIT";-     rm -rfv .ghc;-     cp -a $HOME/.cabsnap/ghc $HOME/.ghc;-     cp -a $HOME/.cabsnap/lib $HOME/.cabsnap/share $HOME/.cabsnap/bin $HOME/.cabal/;-   else-     echo "cabal build-cache MISS";-     rm -rf $HOME/.cabsnap;-     mkdir -p $HOME/.ghc $HOME/.cabal/lib $HOME/.cabal/share $HOME/.cabal/bin;-     cabal install --only-dependencies --enable-tests --enable-benchmarks;-     if [ "$GHCVER" = "7.10.3" ]; then cabal install Cabal-1.22.4.0; fi;-   fi--# snapshot package-db on cache miss- - if [ ! -d $HOME/.cabsnap ];-   then-      echo "snapshotting package-db to build-cache";-      mkdir $HOME/.cabsnap;-      cp -a $HOME/.ghc $HOME/.cabsnap/ghc;-      cp -a $HOME/.cabal/lib $HOME/.cabal/share $HOME/.cabal/bin installplan.txt $HOME/.cabsnap/;-   fi+  - cabal --version+  - echo "$(${HC} --version) [$(${HC} --print-project-git-commit-id 2> /dev/null || echo '?')]"+  - BENCH=${BENCH---enable-benchmarks}+  - TEST=${TEST---enable-tests}+  - INSTALLED=${INSTALLED-true}+  - GHCHEAD=${GHCHEAD-false}+  - travis_retry cabal update+  - "sed -i.bak 's/^jobs:/-- jobs: 2/' ${HOME}/.cabal/config"+  - rm -fv cabal.project.local+  - "printf 'packages: \".\"\\n' > cabal.project"+  # Overlay Hackage Package Index for GHC HEAD: https://github.com/hvr/head.hackage+  - |+    if $GHCHEAD; then+      echo 'allow-newer: *:base, *:template-haskell' >> cabal.project+      echo 'repository head.hackage' >> cabal.project+      echo '   url: http://head.hackage.haskell.org/' >> cabal.project+      echo '   secure: True' >> cabal.project+      echo '   root-keys: 07c59cb65787dedfaef5bd5f987ceb5f7e5ebf88b904bbd4c5cbdeb2ff71b740' >> cabal.project+      echo '              2e8555dde16ebd8df076f1a8ef13b8f14c66bad8eafefd7d9e37d0ed711821fb' >> cabal.project+      echo '              8f79fd2389ab2967354407ec852cbe73f2e8635793ac446d09461ffb99527f6e' >> cabal.project+      echo '   key-threshold: 3' >> cabal.project+    fi+  - cat cabal.project+  - if $GHCHEAD; then cabal new-update head.hackage -v; fi+  - rm -f cabal.project.freeze+  - cabal new-build -w ${HC} ${TEST} ${BENCH} --project-file="cabal.project" --dep -j2 all+  - cabal new-build -w ${HC} --disable-tests --disable-benchmarks --project-file="cabal.project" --dep -j2 all+  - rm -rf "."/.ghc.environment.* "."/dist+  - DISTDIR=$(mktemp -d /tmp/dist-test.XXXX)  # Here starts the actual work to be performed for the package under test; # any command which exits with a non-zero exit code causes the build to fail. script:- - cabal configure --enable-tests -v2  # -v2 provides useful information for debugging- - cabal build   # this builds all libraries and executables (including tests)- - cabal test- - cabal bench || true  # expected result: these will crash- - cabal sdist || true  # tests that a source-distribution can be generated+  # test that source-distributions can be generated+  - (cd "." && cabal sdist)+  - mv "."/dist/algebra-*.tar.gz ${DISTDIR}/+  - cd ${DISTDIR} || false+  - find . -maxdepth 1 -name '*.tar.gz' -exec tar -xvf '{}' \;+  - "printf 'packages: algebra-*/*.cabal\\n' > cabal.project"+  # Overlay Hackage Package Index for GHC HEAD: https://github.com/hvr/head.hackage+  - |+    if $GHCHEAD; then+      echo 'allow-newer: *:base, *:template-haskell' >> cabal.project+      echo 'repository head.hackage' >> cabal.project+      echo '   url: http://head.hackage.haskell.org/' >> cabal.project+      echo '   secure: True' >> cabal.project+      echo '   root-keys: 07c59cb65787dedfaef5bd5f987ceb5f7e5ebf88b904bbd4c5cbdeb2ff71b740' >> cabal.project+      echo '              2e8555dde16ebd8df076f1a8ef13b8f14c66bad8eafefd7d9e37d0ed711821fb' >> cabal.project+      echo '              8f79fd2389ab2967354407ec852cbe73f2e8635793ac446d09461ffb99527f6e' >> cabal.project+      echo '   key-threshold: 3' >> cabal.project+    fi+  - cat cabal.project+  # this builds all libraries and executables (without tests/benchmarks)+  - cabal new-build -w ${HC} --disable-tests --disable-benchmarks all -# Check that the resulting source distribution can be built & installed.-# If there are no other `.tar.gz` files in `dist`, this can be even simpler:-# `cabal install --force-reinstalls dist/*-*.tar.gz`- - SRC_TGZ=$(cabal info . | awk '{print $2;exit}').tar.gz &&-   (cd dist && cabal install --force-reinstalls "$SRC_TGZ")+  # Build with installed constraints for packages in global-db+  - if $INSTALLED; then echo cabal new-build -w ${HC} --disable-tests --disable-benchmarks $(${HCPKG} list --global --simple-output --names-only | sed 's/\([a-zA-Z0-9-]\{1,\}\) */--constraint="\1 installed" /g') all | sh; else echo "Not building with installed constraints"; fi +  # build tests & benchmarks+  - cabal new-build -w ${HC} ${TEST} ${BENCH} all+  # cabal new-test FAILS if there is no test-suite at all;+  # so we first test if there is any test-suite by --dry-run,+  # and, if there is any, then we actually run it.+  - |+    if cabal new-test -w ${HC} all --dry-run; then+      cabal new-test -w ${HC} all;+    else+      echo "No test-suite found.";+    fi+  # The same applies for benchmarks, but we've ignored them before switching to new-build...+  - cabal new-bench -w ${HC} all || true +  - rm -rf ./dist-newstyle+ notifications:   irc:     channels:@@ -100,3 +143,6 @@     skip_join: true     template:       - "\x0313algebra\x03/\x0306%{branch}\x03 \x0314%{commit}\x03 %{build_url} %{message}"++# REGENDATA ["algebra.cabal"]+# EOF
CHANGELOG.markdown view
@@ -1,3 +1,7 @@+4.3.1+-----+* Compatibility with GHC 8.4.x: added `Semigroup (End r)` instance.+ 4.3 --- * Compatibility with GHC 8.0.x
algebra.cabal view
@@ -1,6 +1,6 @@ name:          algebra category:      Math, Algebra-version:       4.3+version:       4.3.1 license:       BSD3 cabal-version: >= 1.6 license-file:  LICENSE@@ -14,7 +14,8 @@ description:   Constructive abstract algebra build-type:    Simple tested-with:   GHC == 7.4.2, GHC == 7.6.3, GHC == 7.8.4,-               GHC == 7.10.3, GHC == 8.0.1+               GHC == 7.10.3, GHC == 8.0.1, GHC == 8.0.2,+               GHC == 8.2.1, GHC == 8.2.2, GHC == 8.4.1 extra-source-files:   .ghci   .gitignore
src/Numeric/Ring/Endomorphism.hs view
@@ -10,11 +10,14 @@ import Numeric.Algebra import Prelude hiding ((*),(+),(-),negate,subtract) import Data.Proxy+import Data.Semigroup (Semigroup((<>)))  -- | The endomorphism ring of an abelian group or the endomorphism semiring of an abelian monoid --  -- http://en.wikipedia.org/wiki/Endomorphism_ring newtype End a = End { appEnd :: a -> a }+instance Semigroup (End r) where+  (End a) <> (End b) = End (a . b) instance Monoid (End r) where   mappend (End a) (End b) = End (a . b)   mempty = End id