-- Hoogle documentation, generated by Haddock -- See Hoogle, http://www.haskell.org/hoogle/ -- | Haskell 98 groups -- -- Haskell 98 groups. A group is a monoid with invertibility. @package groups @version 0.4.1.0 module Data.Group -- | A Group is a Monoid plus a function, invert, such -- that: -- --
-- a <> invert a == mempty ---- --
-- invert a <> a == mempty --class Monoid m => Group m where pow x0 n0 = case compare n0 0 of { LT -> invert . f x0 $ negate n0 EQ -> mempty GT -> f x0 n0 } where f x n | even n = f (x `mappend` x) (n `quot` 2) | n == 1 = x | otherwise = g (x `mappend` x) (n `quot` 2) x g x n c | even n = g (x `mappend` x) (n `quot` 2) c | n == 1 = x `mappend` c | otherwise = g (x `mappend` x) (n `quot` 2) (x `mappend` c) invert :: Group m => m -> m -- |
-- pow a n == a <> a <> ... <> a ---- --
-- (n lots of a) ---- -- If n is negative, the result is inverted. pow :: (Group m, Integral x) => m -> x -> m -- | An Abelian group is a Group that follows the rule: -- --
-- a <> b == b <> a --class Group g => Abelian g instance Data.Group.Group () instance GHC.Num.Num a => Data.Group.Group (Data.Monoid.Sum a) instance GHC.Real.Fractional a => Data.Group.Group (Data.Monoid.Product a) instance Data.Group.Group a => Data.Group.Group (Data.Monoid.Dual a) instance Data.Group.Group b => Data.Group.Group (a -> b) instance (Data.Group.Group a, Data.Group.Group b) => Data.Group.Group (a, b) instance (Data.Group.Group a, Data.Group.Group b, Data.Group.Group c) => Data.Group.Group (a, b, c) instance (Data.Group.Group a, Data.Group.Group b, Data.Group.Group c, Data.Group.Group d) => Data.Group.Group (a, b, c, d) instance (Data.Group.Group a, Data.Group.Group b, Data.Group.Group c, Data.Group.Group d, Data.Group.Group e) => Data.Group.Group (a, b, c, d, e) instance Data.Group.Abelian () instance GHC.Num.Num a => Data.Group.Abelian (Data.Monoid.Sum a) instance GHC.Real.Fractional a => Data.Group.Abelian (Data.Monoid.Product a) instance Data.Group.Abelian a => Data.Group.Abelian (Data.Monoid.Dual a) instance Data.Group.Abelian b => Data.Group.Abelian (a -> b) instance (Data.Group.Abelian a, Data.Group.Abelian b) => Data.Group.Abelian (a, b) instance (Data.Group.Abelian a, Data.Group.Abelian b, Data.Group.Abelian c) => Data.Group.Abelian (a, b, c) instance (Data.Group.Abelian a, Data.Group.Abelian b, Data.Group.Abelian c, Data.Group.Abelian d) => Data.Group.Abelian (a, b, c, d) instance (Data.Group.Abelian a, Data.Group.Abelian b, Data.Group.Abelian c, Data.Group.Abelian d, Data.Group.Abelian e) => Data.Group.Abelian (a, b, c, d, e)