-- Hoogle documentation, generated by Haddock -- See Hoogle, http://www.haskell.org/hoogle/ -- | Ring-like objects. -- -- Semirings, rings, division rings, and modules. @package rings @version 0.1 module Data.Semigroup.Additive -- | Hyphenation operator. type ( g - f ) a = f (g a) infixr 1 - -- | A commutative Semigroup under +. newtype Additive a Additive :: a -> Additive a [unAdditive] :: Additive a -> a zero :: (Additive - Monoid) a => a (+) :: (Additive - Semigroup) a => a -> a -> a infixl 6 + subtract :: (Additive - Group) a => a -> a -> a -- | A (potentially non-commutative) Semigroup under +. newtype Multiplicative a Multiplicative :: a -> Multiplicative a [unMultiplicative] :: Multiplicative a -> a one :: (Multiplicative - Monoid) a => a (*) :: (Multiplicative - Semigroup) a => a -> a -> a infixl 7 * (/) :: (Multiplicative - Group) a => a -> a -> a infixl 7 / -- | Left division by a multiplicative group element. -- -- When * is commutative we must have: -- --
--   x \\ y = y / x
--   
(\\) :: (Multiplicative - Group) a => a -> a -> a infixl 7 \\ -- | Integral power of a multiplicative group element. -- --
--   one == a ^^ 0
--   
-- --
--   >>> 8 ^^ 0 :: Double
--   1.0
--   
--   >>> 8 ^^ 0 :: Pico
--   1.000000000000
--   
(^^) :: (Multiplicative - Group) a => a -> Integer -> a infixr 8 ^^ -- | Reciprocal of a multiplicative group element. -- --
--   x / y = x * recip y
--   x \\ y = recip x * y
--   
-- --
--   >>> recip (3 :+ 4) :: Complex Rational
--   3 % 25 :+ (-4) % 25
--   
--   >>> recip (3 :+ 4) :: Complex Double
--   0.12 :+ (-0.16)
--   
--   >>> recip (3 :+ 4) :: Complex Pico
--   0.120000000000 :+ -0.160000000000
--   
recip :: (Multiplicative - Group) a => a -> a instance GHC.Base.Functor Data.Semigroup.Additive.Multiplicative instance GHC.Show.Show a => GHC.Show.Show (Data.Semigroup.Additive.Multiplicative a) instance GHC.Classes.Ord a => GHC.Classes.Ord (Data.Semigroup.Additive.Multiplicative a) instance GHC.Generics.Generic (Data.Semigroup.Additive.Multiplicative a) instance GHC.Classes.Eq a => GHC.Classes.Eq (Data.Semigroup.Additive.Multiplicative a) instance GHC.Base.Functor Data.Semigroup.Additive.Additive instance GHC.Show.Show a => GHC.Show.Show (Data.Semigroup.Additive.Additive a) instance GHC.Classes.Ord a => GHC.Classes.Ord (Data.Semigroup.Additive.Additive a) instance GHC.Generics.Generic (Data.Semigroup.Additive.Additive a) instance GHC.Classes.Eq a => GHC.Classes.Eq (Data.Semigroup.Additive.Additive a) instance GHC.Base.Applicative Data.Semigroup.Additive.Multiplicative instance Data.Distributive.Distributive Data.Semigroup.Additive.Multiplicative instance Data.Functor.Rep.Representable Data.Semigroup.Additive.Multiplicative instance ((Data.Semigroup.Additive.-) Data.Semigroup.Additive.Additive Data.Group.Group a, (Data.Semigroup.Additive.-) Data.Semigroup.Additive.Multiplicative GHC.Base.Semigroup a) => GHC.Base.Semigroup (Data.Semigroup.Additive.Multiplicative (Data.Complex.Complex a)) instance ((Data.Semigroup.Additive.-) Data.Semigroup.Additive.Additive Data.Group.Group a, (Data.Semigroup.Additive.-) Data.Semigroup.Additive.Multiplicative GHC.Base.Monoid a) => GHC.Base.Monoid (Data.Semigroup.Additive.Multiplicative (Data.Complex.Complex a)) instance ((Data.Semigroup.Additive.-) Data.Semigroup.Additive.Additive Data.Group.Group a, (Data.Semigroup.Additive.-) Data.Semigroup.Additive.Multiplicative Data.Group.Group a) => Data.Magma.Magma (Data.Semigroup.Additive.Multiplicative (Data.Complex.Complex a)) instance ((Data.Semigroup.Additive.-) Data.Semigroup.Additive.Additive Data.Group.Group a, (Data.Semigroup.Additive.-) Data.Semigroup.Additive.Multiplicative Data.Group.Group a) => Data.Group.Quasigroup (Data.Semigroup.Additive.Multiplicative (Data.Complex.Complex a)) instance ((Data.Semigroup.Additive.-) Data.Semigroup.Additive.Additive Data.Group.Group a, (Data.Semigroup.Additive.-) Data.Semigroup.Additive.Multiplicative Data.Group.Group a) => Data.Group.Loop (Data.Semigroup.Additive.Multiplicative (Data.Complex.Complex a)) instance ((Data.Semigroup.Additive.-) Data.Semigroup.Additive.Additive Data.Group.Group a, (Data.Semigroup.Additive.-) Data.Semigroup.Additive.Multiplicative Data.Group.Group a) => Data.Group.Group (Data.Semigroup.Additive.Multiplicative (Data.Complex.Complex a)) instance ((Data.Semigroup.Additive.-) Data.Semigroup.Additive.Additive GHC.Base.Semigroup a, (Data.Semigroup.Additive.-) Data.Semigroup.Additive.Multiplicative GHC.Base.Semigroup a) => GHC.Base.Semigroup (Data.Semigroup.Additive.Additive (GHC.Real.Ratio a)) instance ((Data.Semigroup.Additive.-) Data.Semigroup.Additive.Additive GHC.Base.Monoid a, (Data.Semigroup.Additive.-) Data.Semigroup.Additive.Multiplicative GHC.Base.Monoid a) => GHC.Base.Monoid (Data.Semigroup.Additive.Additive (GHC.Real.Ratio a)) instance ((Data.Semigroup.Additive.-) Data.Semigroup.Additive.Additive Data.Group.Group a, (Data.Semigroup.Additive.-) Data.Semigroup.Additive.Multiplicative GHC.Base.Monoid a) => Data.Magma.Magma (Data.Semigroup.Additive.Additive (GHC.Real.Ratio a)) instance ((Data.Semigroup.Additive.-) Data.Semigroup.Additive.Additive Data.Group.Group a, (Data.Semigroup.Additive.-) Data.Semigroup.Additive.Multiplicative GHC.Base.Monoid a) => Data.Group.Quasigroup (Data.Semigroup.Additive.Additive (GHC.Real.Ratio a)) instance ((Data.Semigroup.Additive.-) Data.Semigroup.Additive.Additive Data.Group.Group a, (Data.Semigroup.Additive.-) Data.Semigroup.Additive.Multiplicative GHC.Base.Monoid a) => Data.Group.Loop (Data.Semigroup.Additive.Additive (GHC.Real.Ratio a)) instance ((Data.Semigroup.Additive.-) Data.Semigroup.Additive.Additive Data.Group.Group a, (Data.Semigroup.Additive.-) Data.Semigroup.Additive.Multiplicative GHC.Base.Monoid a) => Data.Group.Group (Data.Semigroup.Additive.Additive (GHC.Real.Ratio a)) instance (Data.Semigroup.Additive.-) Data.Semigroup.Additive.Additive GHC.Base.Semigroup a => GHC.Base.Semigroup (Data.Semigroup.Additive.Multiplicative [a]) instance (Data.Semigroup.Additive.-) Data.Semigroup.Additive.Additive GHC.Base.Monoid a => GHC.Base.Monoid (Data.Semigroup.Additive.Multiplicative [a]) instance (Data.Semigroup.Additive.-) Data.Semigroup.Additive.Additive GHC.Base.Semigroup a => GHC.Base.Semigroup (Data.Semigroup.Additive.Multiplicative (GHC.Base.NonEmpty a)) instance (Data.Semigroup.Additive.-) Data.Semigroup.Additive.Additive GHC.Base.Semigroup a => GHC.Base.Semigroup (Data.Semigroup.Additive.Multiplicative (Data.Semigroup.Min a)) instance (Data.Semigroup.Additive.-) Data.Semigroup.Additive.Additive GHC.Base.Monoid a => GHC.Base.Monoid (Data.Semigroup.Additive.Multiplicative (Data.Semigroup.Min a)) instance GHC.Base.Semigroup (Data.Semigroup.Additive.Multiplicative GHC.Types.Int) instance GHC.Base.Semigroup (Data.Semigroup.Additive.Multiplicative GHC.Int.Int8) instance GHC.Base.Semigroup (Data.Semigroup.Additive.Multiplicative GHC.Int.Int16) instance GHC.Base.Semigroup (Data.Semigroup.Additive.Multiplicative GHC.Int.Int32) instance GHC.Base.Semigroup (Data.Semigroup.Additive.Multiplicative GHC.Int.Int64) instance GHC.Base.Semigroup (Data.Semigroup.Additive.Multiplicative GHC.Integer.Type.Integer) instance GHC.Base.Semigroup (Data.Semigroup.Additive.Multiplicative GHC.Types.Word) instance GHC.Base.Semigroup (Data.Semigroup.Additive.Multiplicative GHC.Word.Word8) instance GHC.Base.Semigroup (Data.Semigroup.Additive.Multiplicative GHC.Word.Word16) instance GHC.Base.Semigroup (Data.Semigroup.Additive.Multiplicative GHC.Word.Word32) instance GHC.Base.Semigroup (Data.Semigroup.Additive.Multiplicative GHC.Word.Word64) instance GHC.Base.Semigroup (Data.Semigroup.Additive.Multiplicative GHC.Natural.Natural) instance GHC.Base.Semigroup (Data.Semigroup.Additive.Multiplicative Data.Fixed.Uni) instance GHC.Base.Semigroup (Data.Semigroup.Additive.Multiplicative Data.Fixed.Deci) instance GHC.Base.Semigroup (Data.Semigroup.Additive.Multiplicative Data.Fixed.Centi) instance GHC.Base.Semigroup (Data.Semigroup.Additive.Multiplicative Data.Fixed.Milli) instance GHC.Base.Semigroup (Data.Semigroup.Additive.Multiplicative Data.Fixed.Micro) instance GHC.Base.Semigroup (Data.Semigroup.Additive.Multiplicative Data.Fixed.Nano) instance GHC.Base.Semigroup (Data.Semigroup.Additive.Multiplicative Data.Fixed.Pico) instance GHC.Base.Semigroup (Data.Semigroup.Additive.Multiplicative GHC.Types.Float) instance GHC.Base.Semigroup (Data.Semigroup.Additive.Multiplicative Foreign.C.Types.CFloat) instance GHC.Base.Semigroup (Data.Semigroup.Additive.Multiplicative GHC.Types.Double) instance GHC.Base.Semigroup (Data.Semigroup.Additive.Multiplicative Foreign.C.Types.CDouble) instance GHC.Base.Monoid (Data.Semigroup.Additive.Multiplicative GHC.Types.Int) instance GHC.Base.Monoid (Data.Semigroup.Additive.Multiplicative GHC.Int.Int8) instance GHC.Base.Monoid (Data.Semigroup.Additive.Multiplicative GHC.Int.Int16) instance GHC.Base.Monoid (Data.Semigroup.Additive.Multiplicative GHC.Int.Int32) instance GHC.Base.Monoid (Data.Semigroup.Additive.Multiplicative GHC.Int.Int64) instance GHC.Base.Monoid (Data.Semigroup.Additive.Multiplicative GHC.Integer.Type.Integer) instance GHC.Base.Monoid (Data.Semigroup.Additive.Multiplicative GHC.Types.Word) instance GHC.Base.Monoid (Data.Semigroup.Additive.Multiplicative GHC.Word.Word8) instance GHC.Base.Monoid (Data.Semigroup.Additive.Multiplicative GHC.Word.Word16) instance GHC.Base.Monoid (Data.Semigroup.Additive.Multiplicative GHC.Word.Word32) instance GHC.Base.Monoid (Data.Semigroup.Additive.Multiplicative GHC.Word.Word64) instance GHC.Base.Monoid (Data.Semigroup.Additive.Multiplicative GHC.Natural.Natural) instance GHC.Base.Monoid (Data.Semigroup.Additive.Multiplicative Data.Fixed.Uni) instance GHC.Base.Monoid (Data.Semigroup.Additive.Multiplicative Data.Fixed.Deci) instance GHC.Base.Monoid (Data.Semigroup.Additive.Multiplicative Data.Fixed.Centi) instance GHC.Base.Monoid (Data.Semigroup.Additive.Multiplicative Data.Fixed.Milli) instance GHC.Base.Monoid (Data.Semigroup.Additive.Multiplicative Data.Fixed.Micro) instance GHC.Base.Monoid (Data.Semigroup.Additive.Multiplicative Data.Fixed.Nano) instance GHC.Base.Monoid (Data.Semigroup.Additive.Multiplicative Data.Fixed.Pico) instance GHC.Base.Monoid (Data.Semigroup.Additive.Multiplicative GHC.Types.Float) instance GHC.Base.Monoid (Data.Semigroup.Additive.Multiplicative Foreign.C.Types.CFloat) instance GHC.Base.Monoid (Data.Semigroup.Additive.Multiplicative GHC.Types.Double) instance GHC.Base.Monoid (Data.Semigroup.Additive.Multiplicative Foreign.C.Types.CDouble) instance Data.Magma.Magma (Data.Semigroup.Additive.Multiplicative Data.Fixed.Uni) instance Data.Magma.Magma (Data.Semigroup.Additive.Multiplicative Data.Fixed.Deci) instance Data.Magma.Magma (Data.Semigroup.Additive.Multiplicative Data.Fixed.Centi) instance Data.Magma.Magma (Data.Semigroup.Additive.Multiplicative Data.Fixed.Milli) instance Data.Magma.Magma (Data.Semigroup.Additive.Multiplicative Data.Fixed.Micro) instance Data.Magma.Magma (Data.Semigroup.Additive.Multiplicative Data.Fixed.Nano) instance Data.Magma.Magma (Data.Semigroup.Additive.Multiplicative Data.Fixed.Pico) instance Data.Magma.Magma (Data.Semigroup.Additive.Multiplicative GHC.Types.Float) instance Data.Magma.Magma (Data.Semigroup.Additive.Multiplicative Foreign.C.Types.CFloat) instance Data.Magma.Magma (Data.Semigroup.Additive.Multiplicative GHC.Types.Double) instance Data.Magma.Magma (Data.Semigroup.Additive.Multiplicative Foreign.C.Types.CDouble) instance Data.Group.Quasigroup (Data.Semigroup.Additive.Multiplicative Data.Fixed.Uni) instance Data.Group.Quasigroup (Data.Semigroup.Additive.Multiplicative Data.Fixed.Deci) instance Data.Group.Quasigroup (Data.Semigroup.Additive.Multiplicative Data.Fixed.Centi) instance Data.Group.Quasigroup (Data.Semigroup.Additive.Multiplicative Data.Fixed.Milli) instance Data.Group.Quasigroup (Data.Semigroup.Additive.Multiplicative Data.Fixed.Micro) instance Data.Group.Quasigroup (Data.Semigroup.Additive.Multiplicative Data.Fixed.Nano) instance Data.Group.Quasigroup (Data.Semigroup.Additive.Multiplicative Data.Fixed.Pico) instance Data.Group.Quasigroup (Data.Semigroup.Additive.Multiplicative GHC.Types.Float) instance Data.Group.Quasigroup (Data.Semigroup.Additive.Multiplicative Foreign.C.Types.CFloat) instance Data.Group.Quasigroup (Data.Semigroup.Additive.Multiplicative GHC.Types.Double) instance Data.Group.Quasigroup (Data.Semigroup.Additive.Multiplicative Foreign.C.Types.CDouble) instance Data.Group.Loop (Data.Semigroup.Additive.Multiplicative Data.Fixed.Uni) instance Data.Group.Loop (Data.Semigroup.Additive.Multiplicative Data.Fixed.Deci) instance Data.Group.Loop (Data.Semigroup.Additive.Multiplicative Data.Fixed.Centi) instance Data.Group.Loop (Data.Semigroup.Additive.Multiplicative Data.Fixed.Milli) instance Data.Group.Loop (Data.Semigroup.Additive.Multiplicative Data.Fixed.Micro) instance Data.Group.Loop (Data.Semigroup.Additive.Multiplicative Data.Fixed.Nano) instance Data.Group.Loop (Data.Semigroup.Additive.Multiplicative Data.Fixed.Pico) instance Data.Group.Loop (Data.Semigroup.Additive.Multiplicative GHC.Types.Float) instance Data.Group.Loop (Data.Semigroup.Additive.Multiplicative Foreign.C.Types.CFloat) instance Data.Group.Loop (Data.Semigroup.Additive.Multiplicative GHC.Types.Double) instance Data.Group.Loop (Data.Semigroup.Additive.Multiplicative Foreign.C.Types.CDouble) instance Data.Group.Group (Data.Semigroup.Additive.Multiplicative Data.Fixed.Uni) instance Data.Group.Group (Data.Semigroup.Additive.Multiplicative Data.Fixed.Deci) instance Data.Group.Group (Data.Semigroup.Additive.Multiplicative Data.Fixed.Centi) instance Data.Group.Group (Data.Semigroup.Additive.Multiplicative Data.Fixed.Milli) instance Data.Group.Group (Data.Semigroup.Additive.Multiplicative Data.Fixed.Micro) instance Data.Group.Group (Data.Semigroup.Additive.Multiplicative Data.Fixed.Nano) instance Data.Group.Group (Data.Semigroup.Additive.Multiplicative Data.Fixed.Pico) instance Data.Group.Group (Data.Semigroup.Additive.Multiplicative GHC.Types.Float) instance Data.Group.Group (Data.Semigroup.Additive.Multiplicative Foreign.C.Types.CFloat) instance Data.Group.Group (Data.Semigroup.Additive.Multiplicative GHC.Types.Double) instance Data.Group.Group (Data.Semigroup.Additive.Multiplicative Foreign.C.Types.CDouble) instance (Data.Semigroup.Additive.-) Data.Semigroup.Additive.Multiplicative GHC.Base.Semigroup a => GHC.Base.Semigroup (Data.Semigroup.Additive.Multiplicative (GHC.Real.Ratio a)) instance (Data.Semigroup.Additive.-) Data.Semigroup.Additive.Multiplicative GHC.Base.Monoid a => GHC.Base.Monoid (Data.Semigroup.Additive.Multiplicative (GHC.Real.Ratio a)) instance (Data.Semigroup.Additive.-) Data.Semigroup.Additive.Multiplicative GHC.Base.Monoid a => Data.Magma.Magma (Data.Semigroup.Additive.Multiplicative (GHC.Real.Ratio a)) instance (Data.Semigroup.Additive.-) Data.Semigroup.Additive.Multiplicative GHC.Base.Monoid a => Data.Group.Quasigroup (Data.Semigroup.Additive.Multiplicative (GHC.Real.Ratio a)) instance (Data.Semigroup.Additive.-) Data.Semigroup.Additive.Multiplicative GHC.Base.Monoid a => Data.Group.Loop (Data.Semigroup.Additive.Multiplicative (GHC.Real.Ratio a)) instance (Data.Semigroup.Additive.-) Data.Semigroup.Additive.Multiplicative GHC.Base.Monoid a => Data.Group.Group (Data.Semigroup.Additive.Multiplicative (GHC.Real.Ratio a)) instance GHC.Base.Semigroup (Data.Semigroup.Additive.Multiplicative ()) instance GHC.Base.Monoid (Data.Semigroup.Additive.Multiplicative ()) instance Data.Magma.Magma (Data.Semigroup.Additive.Multiplicative ()) instance Data.Group.Quasigroup (Data.Semigroup.Additive.Multiplicative ()) instance Data.Group.Loop (Data.Semigroup.Additive.Multiplicative ()) instance Data.Group.Group (Data.Semigroup.Additive.Multiplicative ()) instance GHC.Base.Semigroup (Data.Semigroup.Additive.Multiplicative GHC.Types.Bool) instance GHC.Base.Monoid (Data.Semigroup.Additive.Multiplicative GHC.Types.Bool) instance (Data.Semigroup.Additive.-) Data.Semigroup.Additive.Multiplicative GHC.Base.Semigroup a => GHC.Base.Semigroup (Data.Semigroup.Additive.Multiplicative (Data.Semigroup.Internal.Dual a)) instance (Data.Semigroup.Additive.-) Data.Semigroup.Additive.Multiplicative GHC.Base.Monoid a => GHC.Base.Monoid (Data.Semigroup.Additive.Multiplicative (Data.Semigroup.Internal.Dual a)) instance (Data.Semigroup.Additive.-) Data.Semigroup.Additive.Multiplicative GHC.Base.Semigroup a => GHC.Base.Semigroup (Data.Semigroup.Additive.Multiplicative (Data.Ord.Down a)) instance (Data.Semigroup.Additive.-) Data.Semigroup.Additive.Multiplicative GHC.Base.Monoid a => GHC.Base.Monoid (Data.Semigroup.Additive.Multiplicative (Data.Ord.Down a)) instance (Data.Semigroup.Additive.-) Data.Semigroup.Additive.Multiplicative GHC.Base.Semigroup a => GHC.Base.Semigroup (Data.Semigroup.Additive.Multiplicative (Data.Semigroup.Max a)) instance (Data.Semigroup.Additive.-) Data.Semigroup.Additive.Multiplicative GHC.Base.Monoid a => GHC.Base.Monoid (Data.Semigroup.Additive.Multiplicative (Data.Semigroup.Max a)) instance ((Data.Semigroup.Additive.-) Data.Semigroup.Additive.Multiplicative GHC.Base.Semigroup a, (Data.Semigroup.Additive.-) Data.Semigroup.Additive.Multiplicative GHC.Base.Semigroup b) => GHC.Base.Semigroup (Data.Semigroup.Additive.Multiplicative (a, b)) instance (Data.Semigroup.Additive.-) Data.Semigroup.Additive.Multiplicative GHC.Base.Semigroup b => GHC.Base.Semigroup (Data.Semigroup.Additive.Multiplicative (a -> b)) instance (Data.Semigroup.Additive.-) Data.Semigroup.Additive.Multiplicative GHC.Base.Monoid b => GHC.Base.Monoid (Data.Semigroup.Additive.Multiplicative (a -> b)) instance (Data.Semigroup.Additive.-) Data.Semigroup.Additive.Multiplicative GHC.Base.Semigroup a => GHC.Base.Semigroup (Data.Semigroup.Additive.Multiplicative (GHC.Maybe.Maybe a)) instance (Data.Semigroup.Additive.-) Data.Semigroup.Additive.Multiplicative GHC.Base.Monoid a => GHC.Base.Monoid (Data.Semigroup.Additive.Multiplicative (GHC.Maybe.Maybe a)) instance ((Data.Semigroup.Additive.-) Data.Semigroup.Additive.Multiplicative GHC.Base.Semigroup a, (Data.Semigroup.Additive.-) Data.Semigroup.Additive.Multiplicative GHC.Base.Semigroup b) => GHC.Base.Semigroup (Data.Semigroup.Additive.Multiplicative (Data.Either.Either a b)) instance GHC.Classes.Ord a => GHC.Base.Semigroup (Data.Semigroup.Additive.Multiplicative (Data.Set.Internal.Set a)) instance (GHC.Classes.Ord k, (Data.Semigroup.Additive.-) Data.Semigroup.Additive.Multiplicative GHC.Base.Semigroup a) => GHC.Base.Semigroup (Data.Semigroup.Additive.Multiplicative (Data.Map.Internal.Map k a)) instance (Data.Semigroup.Additive.-) Data.Semigroup.Additive.Multiplicative GHC.Base.Semigroup a => GHC.Base.Semigroup (Data.Semigroup.Additive.Multiplicative (Data.IntMap.Internal.IntMap a)) instance GHC.Base.Semigroup (Data.Semigroup.Additive.Multiplicative Data.IntSet.Internal.IntSet) instance (GHC.Classes.Ord k, (Data.Semigroup.Additive.-) Data.Semigroup.Additive.Multiplicative GHC.Base.Monoid k, (Data.Semigroup.Additive.-) Data.Semigroup.Additive.Multiplicative GHC.Base.Monoid a) => GHC.Base.Monoid (Data.Semigroup.Additive.Multiplicative (Data.Map.Internal.Map k a)) instance (Data.Semigroup.Additive.-) Data.Semigroup.Additive.Multiplicative GHC.Base.Monoid a => GHC.Base.Monoid (Data.Semigroup.Additive.Multiplicative (Data.IntMap.Internal.IntMap a)) instance GHC.Base.Applicative Data.Semigroup.Additive.Additive instance Data.Distributive.Distributive Data.Semigroup.Additive.Additive instance Data.Functor.Rep.Representable Data.Semigroup.Additive.Additive instance GHC.Base.Semigroup (Data.Semigroup.Additive.Additive GHC.Types.Int) instance GHC.Base.Semigroup (Data.Semigroup.Additive.Additive GHC.Int.Int8) instance GHC.Base.Semigroup (Data.Semigroup.Additive.Additive GHC.Int.Int16) instance GHC.Base.Semigroup (Data.Semigroup.Additive.Additive GHC.Int.Int32) instance GHC.Base.Semigroup (Data.Semigroup.Additive.Additive GHC.Int.Int64) instance GHC.Base.Semigroup (Data.Semigroup.Additive.Additive GHC.Integer.Type.Integer) instance GHC.Base.Semigroup (Data.Semigroup.Additive.Additive GHC.Types.Word) instance GHC.Base.Semigroup (Data.Semigroup.Additive.Additive GHC.Word.Word8) instance GHC.Base.Semigroup (Data.Semigroup.Additive.Additive GHC.Word.Word16) instance GHC.Base.Semigroup (Data.Semigroup.Additive.Additive GHC.Word.Word32) instance GHC.Base.Semigroup (Data.Semigroup.Additive.Additive GHC.Word.Word64) instance GHC.Base.Semigroup (Data.Semigroup.Additive.Additive GHC.Natural.Natural) instance GHC.Base.Semigroup (Data.Semigroup.Additive.Additive Data.Fixed.Uni) instance GHC.Base.Semigroup (Data.Semigroup.Additive.Additive Data.Fixed.Deci) instance GHC.Base.Semigroup (Data.Semigroup.Additive.Additive Data.Fixed.Centi) instance GHC.Base.Semigroup (Data.Semigroup.Additive.Additive Data.Fixed.Milli) instance GHC.Base.Semigroup (Data.Semigroup.Additive.Additive Data.Fixed.Micro) instance GHC.Base.Semigroup (Data.Semigroup.Additive.Additive Data.Fixed.Nano) instance GHC.Base.Semigroup (Data.Semigroup.Additive.Additive Data.Fixed.Pico) instance GHC.Base.Semigroup (Data.Semigroup.Additive.Additive GHC.Types.Float) instance GHC.Base.Semigroup (Data.Semigroup.Additive.Additive Foreign.C.Types.CFloat) instance GHC.Base.Semigroup (Data.Semigroup.Additive.Additive GHC.Types.Double) instance GHC.Base.Semigroup (Data.Semigroup.Additive.Additive Foreign.C.Types.CDouble) instance GHC.Base.Monoid (Data.Semigroup.Additive.Additive GHC.Types.Int) instance GHC.Base.Monoid (Data.Semigroup.Additive.Additive GHC.Int.Int8) instance GHC.Base.Monoid (Data.Semigroup.Additive.Additive GHC.Int.Int16) instance GHC.Base.Monoid (Data.Semigroup.Additive.Additive GHC.Int.Int32) instance GHC.Base.Monoid (Data.Semigroup.Additive.Additive GHC.Int.Int64) instance GHC.Base.Monoid (Data.Semigroup.Additive.Additive GHC.Integer.Type.Integer) instance GHC.Base.Monoid (Data.Semigroup.Additive.Additive GHC.Types.Word) instance GHC.Base.Monoid (Data.Semigroup.Additive.Additive GHC.Word.Word8) instance GHC.Base.Monoid (Data.Semigroup.Additive.Additive GHC.Word.Word16) instance GHC.Base.Monoid (Data.Semigroup.Additive.Additive GHC.Word.Word32) instance GHC.Base.Monoid (Data.Semigroup.Additive.Additive GHC.Word.Word64) instance GHC.Base.Monoid (Data.Semigroup.Additive.Additive GHC.Natural.Natural) instance GHC.Base.Monoid (Data.Semigroup.Additive.Additive Data.Fixed.Uni) instance GHC.Base.Monoid (Data.Semigroup.Additive.Additive Data.Fixed.Deci) instance GHC.Base.Monoid (Data.Semigroup.Additive.Additive Data.Fixed.Centi) instance GHC.Base.Monoid (Data.Semigroup.Additive.Additive Data.Fixed.Milli) instance GHC.Base.Monoid (Data.Semigroup.Additive.Additive Data.Fixed.Micro) instance GHC.Base.Monoid (Data.Semigroup.Additive.Additive Data.Fixed.Nano) instance GHC.Base.Monoid (Data.Semigroup.Additive.Additive Data.Fixed.Pico) instance GHC.Base.Monoid (Data.Semigroup.Additive.Additive GHC.Types.Float) instance GHC.Base.Monoid (Data.Semigroup.Additive.Additive Foreign.C.Types.CFloat) instance GHC.Base.Monoid (Data.Semigroup.Additive.Additive GHC.Types.Double) instance GHC.Base.Monoid (Data.Semigroup.Additive.Additive Foreign.C.Types.CDouble) instance Data.Magma.Magma (Data.Semigroup.Additive.Additive GHC.Types.Int) instance Data.Magma.Magma (Data.Semigroup.Additive.Additive GHC.Int.Int8) instance Data.Magma.Magma (Data.Semigroup.Additive.Additive GHC.Int.Int16) instance Data.Magma.Magma (Data.Semigroup.Additive.Additive GHC.Int.Int32) instance Data.Magma.Magma (Data.Semigroup.Additive.Additive GHC.Int.Int64) instance Data.Magma.Magma (Data.Semigroup.Additive.Additive GHC.Integer.Type.Integer) instance Data.Magma.Magma (Data.Semigroup.Additive.Additive Data.Fixed.Uni) instance Data.Magma.Magma (Data.Semigroup.Additive.Additive Data.Fixed.Deci) instance Data.Magma.Magma (Data.Semigroup.Additive.Additive Data.Fixed.Centi) instance Data.Magma.Magma (Data.Semigroup.Additive.Additive Data.Fixed.Milli) instance Data.Magma.Magma (Data.Semigroup.Additive.Additive Data.Fixed.Micro) instance Data.Magma.Magma (Data.Semigroup.Additive.Additive Data.Fixed.Nano) instance Data.Magma.Magma (Data.Semigroup.Additive.Additive Data.Fixed.Pico) instance Data.Magma.Magma (Data.Semigroup.Additive.Additive GHC.Types.Float) instance Data.Magma.Magma (Data.Semigroup.Additive.Additive Foreign.C.Types.CFloat) instance Data.Magma.Magma (Data.Semigroup.Additive.Additive GHC.Types.Double) instance Data.Magma.Magma (Data.Semigroup.Additive.Additive Foreign.C.Types.CDouble) instance Data.Group.Quasigroup (Data.Semigroup.Additive.Additive GHC.Types.Int) instance Data.Group.Quasigroup (Data.Semigroup.Additive.Additive GHC.Int.Int8) instance Data.Group.Quasigroup (Data.Semigroup.Additive.Additive GHC.Int.Int16) instance Data.Group.Quasigroup (Data.Semigroup.Additive.Additive GHC.Int.Int32) instance Data.Group.Quasigroup (Data.Semigroup.Additive.Additive GHC.Int.Int64) instance Data.Group.Quasigroup (Data.Semigroup.Additive.Additive GHC.Integer.Type.Integer) instance Data.Group.Quasigroup (Data.Semigroup.Additive.Additive Data.Fixed.Uni) instance Data.Group.Quasigroup (Data.Semigroup.Additive.Additive Data.Fixed.Deci) instance Data.Group.Quasigroup (Data.Semigroup.Additive.Additive Data.Fixed.Centi) instance Data.Group.Quasigroup (Data.Semigroup.Additive.Additive Data.Fixed.Milli) instance Data.Group.Quasigroup (Data.Semigroup.Additive.Additive Data.Fixed.Micro) instance Data.Group.Quasigroup (Data.Semigroup.Additive.Additive Data.Fixed.Nano) instance Data.Group.Quasigroup (Data.Semigroup.Additive.Additive Data.Fixed.Pico) instance Data.Group.Quasigroup (Data.Semigroup.Additive.Additive GHC.Types.Float) instance Data.Group.Quasigroup (Data.Semigroup.Additive.Additive Foreign.C.Types.CFloat) instance Data.Group.Quasigroup (Data.Semigroup.Additive.Additive GHC.Types.Double) instance Data.Group.Quasigroup (Data.Semigroup.Additive.Additive Foreign.C.Types.CDouble) instance Data.Group.Loop (Data.Semigroup.Additive.Additive GHC.Types.Int) instance Data.Group.Loop (Data.Semigroup.Additive.Additive GHC.Int.Int8) instance Data.Group.Loop (Data.Semigroup.Additive.Additive GHC.Int.Int16) instance Data.Group.Loop (Data.Semigroup.Additive.Additive GHC.Int.Int32) instance Data.Group.Loop (Data.Semigroup.Additive.Additive GHC.Int.Int64) instance Data.Group.Loop (Data.Semigroup.Additive.Additive GHC.Integer.Type.Integer) instance Data.Group.Loop (Data.Semigroup.Additive.Additive Data.Fixed.Uni) instance Data.Group.Loop (Data.Semigroup.Additive.Additive Data.Fixed.Deci) instance Data.Group.Loop (Data.Semigroup.Additive.Additive Data.Fixed.Centi) instance Data.Group.Loop (Data.Semigroup.Additive.Additive Data.Fixed.Milli) instance Data.Group.Loop (Data.Semigroup.Additive.Additive Data.Fixed.Micro) instance Data.Group.Loop (Data.Semigroup.Additive.Additive Data.Fixed.Nano) instance Data.Group.Loop (Data.Semigroup.Additive.Additive Data.Fixed.Pico) instance Data.Group.Loop (Data.Semigroup.Additive.Additive GHC.Types.Float) instance Data.Group.Loop (Data.Semigroup.Additive.Additive Foreign.C.Types.CFloat) instance Data.Group.Loop (Data.Semigroup.Additive.Additive GHC.Types.Double) instance Data.Group.Loop (Data.Semigroup.Additive.Additive Foreign.C.Types.CDouble) instance Data.Group.Group (Data.Semigroup.Additive.Additive GHC.Types.Int) instance Data.Group.Group (Data.Semigroup.Additive.Additive GHC.Int.Int8) instance Data.Group.Group (Data.Semigroup.Additive.Additive GHC.Int.Int16) instance Data.Group.Group (Data.Semigroup.Additive.Additive GHC.Int.Int32) instance Data.Group.Group (Data.Semigroup.Additive.Additive GHC.Int.Int64) instance Data.Group.Group (Data.Semigroup.Additive.Additive GHC.Integer.Type.Integer) instance Data.Group.Group (Data.Semigroup.Additive.Additive Data.Fixed.Uni) instance Data.Group.Group (Data.Semigroup.Additive.Additive Data.Fixed.Deci) instance Data.Group.Group (Data.Semigroup.Additive.Additive Data.Fixed.Centi) instance Data.Group.Group (Data.Semigroup.Additive.Additive Data.Fixed.Milli) instance Data.Group.Group (Data.Semigroup.Additive.Additive Data.Fixed.Micro) instance Data.Group.Group (Data.Semigroup.Additive.Additive Data.Fixed.Nano) instance Data.Group.Group (Data.Semigroup.Additive.Additive Data.Fixed.Pico) instance Data.Group.Group (Data.Semigroup.Additive.Additive GHC.Types.Float) instance Data.Group.Group (Data.Semigroup.Additive.Additive Foreign.C.Types.CFloat) instance Data.Group.Group (Data.Semigroup.Additive.Additive GHC.Types.Double) instance Data.Group.Group (Data.Semigroup.Additive.Additive Foreign.C.Types.CDouble) instance (Data.Semigroup.Additive.-) Data.Semigroup.Additive.Additive GHC.Base.Semigroup a => GHC.Base.Semigroup (Data.Semigroup.Additive.Additive (Data.Complex.Complex a)) instance (Data.Semigroup.Additive.-) Data.Semigroup.Additive.Additive GHC.Base.Monoid a => GHC.Base.Monoid (Data.Semigroup.Additive.Additive (Data.Complex.Complex a)) instance (Data.Semigroup.Additive.-) Data.Semigroup.Additive.Additive Data.Group.Group a => Data.Magma.Magma (Data.Semigroup.Additive.Additive (Data.Complex.Complex a)) instance (Data.Semigroup.Additive.-) Data.Semigroup.Additive.Additive Data.Group.Group a => Data.Group.Quasigroup (Data.Semigroup.Additive.Additive (Data.Complex.Complex a)) instance (Data.Semigroup.Additive.-) Data.Semigroup.Additive.Additive Data.Group.Group a => Data.Group.Loop (Data.Semigroup.Additive.Additive (Data.Complex.Complex a)) instance (Data.Semigroup.Additive.-) Data.Semigroup.Additive.Additive Data.Group.Group a => Data.Group.Group (Data.Semigroup.Additive.Additive (Data.Complex.Complex a)) instance (Data.Semigroup.Additive.-) Data.Semigroup.Additive.Additive GHC.Base.Semigroup b => GHC.Base.Semigroup (Data.Semigroup.Additive.Additive (a -> b)) instance (Data.Semigroup.Additive.-) Data.Semigroup.Additive.Additive GHC.Base.Monoid b => GHC.Base.Monoid (Data.Semigroup.Additive.Additive (a -> b)) instance GHC.Base.Semigroup (Data.Semigroup.Additive.Additive [a]) instance GHC.Base.Monoid (Data.Semigroup.Additive.Additive [a]) instance GHC.Base.Semigroup (Data.Semigroup.Additive.Additive (GHC.Base.NonEmpty a)) instance (Data.Semigroup.Additive.-) Data.Semigroup.Additive.Additive GHC.Base.Semigroup a => GHC.Base.Semigroup (Data.Semigroup.Additive.Additive (Data.Ord.Down a)) instance (Data.Semigroup.Additive.-) Data.Semigroup.Additive.Additive GHC.Base.Monoid a => GHC.Base.Monoid (Data.Semigroup.Additive.Additive (Data.Ord.Down a)) instance GHC.Base.Semigroup (Data.Semigroup.Additive.Additive ()) instance GHC.Base.Monoid (Data.Semigroup.Additive.Additive ()) instance Data.Magma.Magma (Data.Semigroup.Additive.Additive ()) instance Data.Group.Quasigroup (Data.Semigroup.Additive.Additive ()) instance Data.Group.Loop (Data.Semigroup.Additive.Additive ()) instance Data.Group.Group (Data.Semigroup.Additive.Additive ()) instance GHC.Base.Semigroup (Data.Semigroup.Additive.Additive GHC.Types.Bool) instance GHC.Base.Monoid (Data.Semigroup.Additive.Additive GHC.Types.Bool) instance ((Data.Semigroup.Additive.-) Data.Semigroup.Additive.Additive GHC.Base.Semigroup a, (Data.Semigroup.Additive.-) Data.Semigroup.Additive.Additive GHC.Base.Semigroup b) => GHC.Base.Semigroup (Data.Semigroup.Additive.Additive (a, b)) instance ((Data.Semigroup.Additive.-) Data.Semigroup.Additive.Additive GHC.Base.Monoid a, (Data.Semigroup.Additive.-) Data.Semigroup.Additive.Additive GHC.Base.Monoid b) => GHC.Base.Monoid (Data.Semigroup.Additive.Additive (a, b)) instance ((Data.Semigroup.Additive.-) Data.Semigroup.Additive.Additive GHC.Base.Semigroup a, (Data.Semigroup.Additive.-) Data.Semigroup.Additive.Additive GHC.Base.Semigroup b, (Data.Semigroup.Additive.-) Data.Semigroup.Additive.Additive GHC.Base.Semigroup c) => GHC.Base.Semigroup (Data.Semigroup.Additive.Additive (a, b, c)) instance ((Data.Semigroup.Additive.-) Data.Semigroup.Additive.Additive GHC.Base.Monoid a, (Data.Semigroup.Additive.-) Data.Semigroup.Additive.Additive GHC.Base.Monoid b, (Data.Semigroup.Additive.-) Data.Semigroup.Additive.Additive GHC.Base.Monoid c) => GHC.Base.Monoid (Data.Semigroup.Additive.Additive (a, b, c)) instance (Data.Semigroup.Additive.-) Data.Semigroup.Additive.Additive GHC.Base.Semigroup a => GHC.Base.Semigroup (Data.Semigroup.Additive.Additive (GHC.Maybe.Maybe a)) instance (Data.Semigroup.Additive.-) Data.Semigroup.Additive.Additive GHC.Base.Semigroup a => GHC.Base.Monoid (Data.Semigroup.Additive.Additive (GHC.Maybe.Maybe a)) instance ((Data.Semigroup.Additive.-) Data.Semigroup.Additive.Additive GHC.Base.Semigroup a, (Data.Semigroup.Additive.-) Data.Semigroup.Additive.Additive GHC.Base.Semigroup b) => GHC.Base.Semigroup (Data.Semigroup.Additive.Additive (Data.Either.Either a b)) instance GHC.Classes.Ord a => GHC.Base.Semigroup (Data.Semigroup.Additive.Additive (Data.Set.Internal.Set a)) instance (GHC.Classes.Ord k, (Data.Semigroup.Additive.-) Data.Semigroup.Additive.Additive GHC.Base.Semigroup a) => GHC.Base.Semigroup (Data.Semigroup.Additive.Additive (Data.Map.Internal.Map k a)) instance (Data.Semigroup.Additive.-) Data.Semigroup.Additive.Additive GHC.Base.Semigroup a => GHC.Base.Semigroup (Data.Semigroup.Additive.Additive (Data.IntMap.Internal.IntMap a)) instance GHC.Base.Semigroup (Data.Semigroup.Additive.Additive Data.IntSet.Internal.IntSet) instance GHC.Base.Monoid (Data.Semigroup.Additive.Additive Data.IntSet.Internal.IntSet) instance (Data.Semigroup.Additive.-) Data.Semigroup.Additive.Additive GHC.Base.Semigroup a => GHC.Base.Monoid (Data.Semigroup.Additive.Additive (Data.IntMap.Internal.IntMap a)) instance GHC.Classes.Ord a => GHC.Base.Monoid (Data.Semigroup.Additive.Additive (Data.Set.Internal.Set a)) instance (GHC.Classes.Ord k, (Data.Semigroup.Additive.-) Data.Semigroup.Additive.Additive GHC.Base.Semigroup a) => GHC.Base.Monoid (Data.Semigroup.Additive.Additive (Data.Map.Internal.Map k a)) module Data.Semigroup.Property -- | <math> -- -- All semigroups must right-associate addition. -- -- This is a required property. associative_addition_on :: (Additive - Semigroup) r => Rel r b -> r -> r -> r -> b -- | <math> -- -- All semigroups must right-associate multiplication. -- -- This is a required property. associative_multiplication_on :: (Multiplicative - Semigroup) r => Rel r b -> r -> r -> r -> b -- | <math> -- -- A semigroup with a right-neutral additive identity must satisfy: -- --
--   neutral_addition zero = const True
--   
-- -- Or, equivalently: -- --
--   zero + r = r
--   
-- -- This is a required property for additive monoids. neutral_addition_on :: (Additive - Monoid) r => Rel r b -> r -> b -- | <math> -- -- A semigroup with a right-neutral multiplicative identity must satisfy: -- --
--   neutral_multiplication one = const True
--   
-- -- Or, equivalently: -- --
--   one * r = r
--   
-- -- This is a required propert for multiplicative monoids. neutral_multiplication_on :: (Multiplicative - Monoid) r => Rel r b -> r -> b -- | <math> -- -- This is a an optional property for semigroups, and a -- required property for semirings. commutative_addition_on :: (Additive - Semigroup) r => Rel r b -> r -> r -> b -- | <math> -- -- This is a an optional property for semigroups, and a -- optional property for semirings. It is a required -- property for rings. commutative_multiplication_on :: (Multiplicative - Semigroup) r => Rel r b -> r -> r -> b -- | <math> -- -- If R is right-cancellative wrt addition then for all a -- the section (a +) is injective. -- -- See https://en.wikipedia.org/wiki/Cancellation_property cancellative_addition_on :: (Additive - Semigroup) r => Rel r Bool -> r -> r -> r -> Bool -- | <math> -- -- If R is right-cancellative wrt multiplication then for all -- a the section (a *) is injective. cancellative_multiplication_on :: (Multiplicative - Semigroup) r => Rel r Bool -> r -> r -> r -> Bool -- | Idempotency property for additive semigroups. -- --
--   idempotent_addition = absorbative_addition one
--   
-- -- See https://en.wikipedia.org/wiki/Band_(mathematics). -- -- This is a required property for lattices. idempotent_addition_on :: (Additive - Semigroup) r => Rel r b -> r -> b -- | Idempotency property for multplicative semigroups. -- --
--   idempotent_multiplication = absorbative_multiplication zero
--   
-- -- See https://en.wikipedia.org/wiki/Band_(mathematics). -- -- This is a an optional property for semigroups, and a -- optional property for semirings. -- -- This is a required property for lattices. idempotent_multiplication_on :: (Multiplicative - Semigroup) r => Rel r b -> r -> b morphism_additive_on :: (Additive - Semigroup) r => (Additive - Semigroup) s => Rel s b -> (r -> s) -> r -> r -> b morphism_multiplicative_on :: (Multiplicative - Semigroup) r => (Multiplicative - Semigroup) s => Rel s b -> (r -> s) -> r -> r -> b morphism_additive_on' :: (Additive - Monoid) r => (Additive - Monoid) s => Rel s b -> (r -> s) -> b morphism_multiplicative_on' :: (Multiplicative - Monoid) r => (Multiplicative - Monoid) s => Rel s b -> (r -> s) -> b module Data.Semiring -- | Hyphenation operator. type ( g - f ) a = f (g a) infixr 1 - -- | Right pre-semirings. and (non-unital and unital) right semirings. -- -- A right pre-semiring (sometimes referred to as a bisemigroup) is a -- type R endowed with two associative binary (i.e. semigroup) -- operations: + and *, along with a right-distributivity -- property connecting them: -- -- Distributivity -- --
--   (a + b) * c = (a * c) + (b * c)
--   
-- -- Note that addition and multiplication needn't be commutative. -- -- See the properties module for a detailed specification of the laws. type PresemiringLaw a = ((Additive - Semigroup) a, (Multiplicative - Semigroup) a) class PresemiringLaw a => Presemiring a (+) :: (Additive - Semigroup) a => a -> a -> a infixl 6 + (*) :: (Multiplicative - Semigroup) a => a -> a -> a infixl 7 * -- | Evaluate a non-empty presemiring sum. sum1 :: Presemiring a => Foldable1 f => f a -> a -- | Evaluate a non-empty presemiring sum using a given presemiring. -- --
--   >>> evalWith1 Max $ (1 :| [2..5 :: Int]) :| [1 :| [2..5 :: Int]]
--   | Fold over a non-empty collection using the additive operation of an arbitrary semiring.
--   
-- --
--   >>> sumWith1 First $ (1 :| [2..5 :: Int]) * (1 :| [2..5 :: Int])
--   First {getFirst = 1}
--   
--   >>> sumWith1 First $ Nothing :| [Just (5 :: Int), Just 6,  Nothing]
--   First {getFirst = Nothing}
--   
--   >>> sumWith1 Just $ 1 :| [2..5 :: Int]
--   Just 15
--   
sumWith1 :: Foldable1 t => Presemiring a => (b -> a) -> t b -> a -- | Evaluate a non-empty presemiring product. product1 :: Presemiring a => Foldable1 f => f a -> a -- | Evaluate a non-empty presemiring product using a given presemiring. -- -- As the collection is non-empty this does not require a distinct -- multiplicative unit: -- --
--   >>> productWith1 Just $ 1 :| [2..5 :: Int]
--   Just 120
--   
--   >>> productWith1 First $ 1 :| [2..(5 :: Int)]
--   First {getFirst = 15}
--   
--   >>> productWith1 First $ Nothing :| [Just (5 :: Int), Just 6,  Nothing]
--   First {getFirst = Just 11}
--   
productWith1 :: Foldable1 t => Presemiring a => (b -> a) -> t b -> a -- | Cross-multiply two non-empty collections. -- --
--   >>> xmult1 (Right 2 :| [Left "oops"]) (Right 2 :| [Right 3]) :: Either [Char] Int
--   Right 4
--   
xmult1 :: Foldable1 f => Apply f => Presemiring a => f a -> f a -> a -- | Evaluate a presemiring expression. eval1 :: Presemiring a => Functor f => Foldable1 f => Foldable1 g => f (g a) -> a -- | Evaluate a presemiring expression using a given presemiring. -- --
--   >>> evalWith1 (Max . Down) $ (1 :| [2..5 :: Int]) :| [-5 :| [2..5 :: Int]]
--   Max {getMax = Down 9}
--   
--   >>> evalWith1 Max $ (1 :| [2..5 :: Int]) :| [-5 :| [2..5 :: Int]]
--   Max {getMax = 15}
--   
evalWith1 :: Presemiring r => Functor f => Functor g => Foldable1 f => Foldable1 g => (a -> r) -> f (g a) -> r type SemiringLaw a = ((Additive - Monoid) a, (Multiplicative - Monoid) a) -- | Right semirings. -- -- A right semiring is a pre-semiring with two distinct neutral elements, -- zero and one, such that zero is right-neutral wrt -- addition, one is right-neutral wrt multiplication, and -- zero is right-annihilative wrt multiplication. -- -- Neutrality -- --
--   zero + r = r
--   one * r = r
--   
-- -- Absorbtion -- --
--   zero * a = zero
--   
class (Presemiring a, SemiringLaw a) => Semiring a zero :: (Additive - Monoid) a => a one :: (Multiplicative - Monoid) a => a -- |
--   two = one + one
--   
two :: Semiring a => a -- | Evaluate a natural-numbered power of a semiring element. -- --
--   one = a ^ 0
--   
-- --
--   >>> 8 ^ 0 :: Int
--   1
--   
(^) :: Semiring a => a -> Natural -> a infixr 8 ^ -- | Evaluate a semiring sum. -- --
--   >>> sum [1..5 :: Int]
--   15
--   
sum :: (Additive - Monoid) a => Presemiring a => Foldable f => f a -> a -- | Evaluate a semiring sum using a given semiring. sumWith :: (Additive - Monoid) a => Presemiring a => Foldable t => (b -> a) -> t b -> a -- | Evaluate a semiring product. -- --
--   >>> product [1..5 :: Int]
--   120
--   
product :: (Multiplicative - Monoid) a => Presemiring a => Foldable f => f a -> a -- | Evaluate a semiring product using a given semiring. -- --
--   product f = foldr' ((*) . f) one
--   
-- --
--   >>> productWith Just [1..5 :: Int]
--   Just 120
--   
productWith :: (Multiplicative - Monoid) a => Presemiring a => Foldable t => (b -> a) -> t b -> a -- | Cross-multiply two collections. -- --
--   >>> xmult (V3 1 2 3) (V3 1 2 3)
--   14
--   
--   >>> xmult [1,2,3 :: Int] [1,2,3]
--   36
--   
--   >>> xmult [1,2,3 :: Int] []
--   0
--   
xmult :: Foldable f => Applicative f => Presemiring a => (Additive - Monoid) a => f a -> f a -> a -- | Evaluate a semiring expression. -- --
--   (a11 * .. * a1m) + (a21 * .. * a2n) + ...
--   
-- --
--   >>> eval [[1, 2], [3, 4 :: Int]] -- 1 * 2 + 3 * 4
--   14
--   
--   >>> eval $ sequence [[1, 2], [3, 4 :: Int]] -- 1 + 2 * 3 + 4
--   21
--   
eval :: Semiring a => Functor f => Foldable f => Foldable g => f (g a) -> a -- | Evaluate a semiring expression using a given semiring. -- --
--   >>> evalWith Max [[1..4 :: Int], [0..2 :: Int]]
--   Max {getMax = 24}
--   
evalWith :: Semiring r => Functor f => Functor g => Foldable f => Foldable g => (a -> r) -> f (g a) -> r type RingLaw a = ((Additive - Group) a, (Multiplicative - Monoid) a) -- | Rings. -- -- A ring R is a commutative group with a second monoidal -- operation * that distributes over +. -- -- The basic properties of a ring follow immediately from the axioms: -- --
--   r * zero = zero = zero * r
--   
-- --
--   negate one * r = negate r
--   
-- -- Furthermore, the binomial formula holds for any commuting pair of -- elements (that is, any a and b such that a * b = b * -- a). -- -- If zero = one in a ring R, then R has only one -- element, and is called the zero ring. Otherwise the additive identity, -- the additive inverse of each element, and the multiplicative identity -- are unique. -- -- See https://en.wikipedia.org/wiki/Ring_(mathematics). -- -- If the ring is ordered (i.e. has an Ord instance), then -- the following additional properties must hold: -- --
--   a <= b ⇒ a + c <= b + c
--   
-- --
--   zero <= a && zero <= b ⇒ zero <= a * b
--   
-- -- See the properties module for a detailed specification of the laws. class (Semiring a, RingLaw a) => Ring a (-) :: (Additive - Group) a => a -> a -> a infixl 6 - negate :: (Additive - Group) a => a -> a -- | Absolute value of an element. -- --
--   abs r = mul r (signum r)
--   
-- -- https://en.wikipedia.org/wiki/Linearly_ordered_group abs :: (Additive - Group) a => Ord a => a -> a signum :: Ring a => Ord a => a -> a -- | A generalization of replicate to an arbitrary Monoid. -- -- Adapted from -- http://augustss.blogspot.com/2008/07/lost-and-found-if-i-write-108-in.html. mreplicate :: Monoid a => Natural -> a -> a -- | A commutative Semigroup under +. newtype Additive a Additive :: a -> Additive a [unAdditive] :: Additive a -> a -- | A (potentially non-commutative) Semigroup under +. newtype Multiplicative a Multiplicative :: a -> Multiplicative a [unMultiplicative] :: Multiplicative a -> a class Magma a (<<) :: Magma a => a -> a -> a infixl 6 << class Magma a => Quasigroup a class Quasigroup a => Loop a class (Loop a, Monoid a) => Group a inv :: Group a => a -> a greplicate :: Group a => Integer -> a -> a instance Data.Semiring.Ring a => Data.Semiring.Presemiring (Data.Complex.Complex a) instance Data.Semiring.Ring a => Data.Semiring.Semiring (Data.Complex.Complex a) instance Data.Semiring.Ring () instance Data.Semiring.Ring GHC.Types.Int instance Data.Semiring.Ring GHC.Int.Int8 instance Data.Semiring.Ring GHC.Int.Int16 instance Data.Semiring.Ring GHC.Int.Int32 instance Data.Semiring.Ring GHC.Int.Int64 instance Data.Semiring.Ring GHC.Integer.Type.Integer instance Data.Semiring.Ring (GHC.Real.Ratio GHC.Integer.Type.Integer) instance Data.Semiring.Ring Data.Fixed.Uni instance Data.Semiring.Ring Data.Fixed.Deci instance Data.Semiring.Ring Data.Fixed.Centi instance Data.Semiring.Ring Data.Fixed.Milli instance Data.Semiring.Ring Data.Fixed.Micro instance Data.Semiring.Ring Data.Fixed.Nano instance Data.Semiring.Ring Data.Fixed.Pico instance Data.Semiring.Ring GHC.Types.Float instance Data.Semiring.Ring GHC.Types.Double instance Data.Semiring.Ring Foreign.C.Types.CFloat instance Data.Semiring.Ring Foreign.C.Types.CDouble instance Data.Semiring.Ring a => Data.Semiring.Ring (Data.Complex.Complex a) instance Data.Semiring.Semiring () instance Data.Semiring.Semiring GHC.Types.Bool instance Data.Semiring.Semiring GHC.Types.Word instance Data.Semiring.Semiring GHC.Word.Word8 instance Data.Semiring.Semiring GHC.Word.Word16 instance Data.Semiring.Semiring GHC.Word.Word32 instance Data.Semiring.Semiring GHC.Word.Word64 instance Data.Semiring.Semiring GHC.Natural.Natural instance Data.Semiring.Semiring (GHC.Real.Ratio GHC.Natural.Natural) instance Data.Semiring.Semiring GHC.Types.Int instance Data.Semiring.Semiring GHC.Int.Int8 instance Data.Semiring.Semiring GHC.Int.Int16 instance Data.Semiring.Semiring GHC.Int.Int32 instance Data.Semiring.Semiring GHC.Int.Int64 instance Data.Semiring.Semiring GHC.Integer.Type.Integer instance Data.Semiring.Semiring (GHC.Real.Ratio GHC.Integer.Type.Integer) instance Data.Semiring.Semiring Data.Fixed.Uni instance Data.Semiring.Semiring Data.Fixed.Deci instance Data.Semiring.Semiring Data.Fixed.Centi instance Data.Semiring.Semiring Data.Fixed.Milli instance Data.Semiring.Semiring Data.Fixed.Micro instance Data.Semiring.Semiring Data.Fixed.Nano instance Data.Semiring.Semiring Data.Fixed.Pico instance Data.Semiring.Semiring GHC.Types.Float instance Data.Semiring.Semiring GHC.Types.Double instance Data.Semiring.Semiring Foreign.C.Types.CFloat instance Data.Semiring.Semiring Foreign.C.Types.CDouble instance Data.Semiring.Semiring a => Data.Semiring.Semiring (r -> a) instance Data.Semiring.Semiring a => Data.Semiring.Semiring (GHC.Maybe.Maybe a) instance (Data.Semigroup.Additive.-) Data.Semigroup.Additive.Additive GHC.Base.Monoid a => Data.Semiring.Semiring [a] instance Data.Semiring.Semiring a => Data.Semiring.Semiring (Data.IntMap.Internal.IntMap a) instance (GHC.Classes.Ord k, (Data.Semigroup.Additive.-) Data.Semigroup.Additive.Multiplicative GHC.Base.Monoid k, Data.Semiring.Semiring a) => Data.Semiring.Semiring (Data.Map.Internal.Map k a) instance Data.Semiring.Presemiring () instance Data.Semiring.Presemiring GHC.Types.Bool instance Data.Semiring.Presemiring GHC.Types.Word instance Data.Semiring.Presemiring GHC.Word.Word8 instance Data.Semiring.Presemiring GHC.Word.Word16 instance Data.Semiring.Presemiring GHC.Word.Word32 instance Data.Semiring.Presemiring GHC.Word.Word64 instance Data.Semiring.Presemiring GHC.Natural.Natural instance Data.Semiring.Presemiring (GHC.Real.Ratio GHC.Natural.Natural) instance Data.Semiring.Presemiring GHC.Types.Int instance Data.Semiring.Presemiring GHC.Int.Int8 instance Data.Semiring.Presemiring GHC.Int.Int16 instance Data.Semiring.Presemiring GHC.Int.Int32 instance Data.Semiring.Presemiring GHC.Int.Int64 instance Data.Semiring.Presemiring GHC.Integer.Type.Integer instance Data.Semiring.Presemiring (GHC.Real.Ratio GHC.Integer.Type.Integer) instance Data.Semiring.Presemiring Data.Fixed.Uni instance Data.Semiring.Presemiring Data.Fixed.Deci instance Data.Semiring.Presemiring Data.Fixed.Centi instance Data.Semiring.Presemiring Data.Fixed.Milli instance Data.Semiring.Presemiring Data.Fixed.Micro instance Data.Semiring.Presemiring Data.Fixed.Nano instance Data.Semiring.Presemiring Data.Fixed.Pico instance Data.Semiring.Presemiring GHC.Types.Float instance Data.Semiring.Presemiring GHC.Types.Double instance Data.Semiring.Presemiring Foreign.C.Types.CFloat instance Data.Semiring.Presemiring Foreign.C.Types.CDouble instance Data.Semiring.Presemiring a => Data.Semiring.Presemiring (r -> a) instance (Data.Semiring.Presemiring a, Data.Semiring.Presemiring b) => Data.Semiring.Presemiring (Data.Either.Either a b) instance Data.Semiring.Presemiring a => Data.Semiring.Presemiring (GHC.Maybe.Maybe a) instance (Data.Semigroup.Additive.-) Data.Semigroup.Additive.Additive GHC.Base.Semigroup a => Data.Semiring.Presemiring [a] instance (Data.Semigroup.Additive.-) Data.Semigroup.Additive.Additive GHC.Base.Semigroup a => Data.Semiring.Presemiring (GHC.Base.NonEmpty a) instance Data.Semiring.Presemiring Data.IntSet.Internal.IntSet instance GHC.Classes.Ord a => Data.Semiring.Presemiring (Data.Set.Internal.Set a) instance Data.Semiring.Presemiring a => Data.Semiring.Presemiring (Data.IntMap.Internal.IntMap a) instance (GHC.Classes.Ord k, Data.Semiring.Presemiring a) => Data.Semiring.Presemiring (Data.Map.Internal.Map k a) module Data.Semifield type SemifieldLaw a = ((Additive - Monoid) a, (Multiplicative - Group) a) -- | A semifield, near-field, or division ring. -- -- Instances needn't have commutative multiplication or additive -- inverses, however addition must be commutative, and addition and -- multiplication must be associative as usual. -- -- See also the wikipedia definitions of: -- -- class (Semiring a, SemifieldLaw a) => Semifield a -- | The NaN value of the semifield. -- --
--   anan = zero / zero
--   
anan :: Semifield a => a -- | The positive infinity of the semifield. -- --
--   pinf = one / zero
--   
pinf :: Semifield a => a (/) :: (Multiplicative - Group) a => a -> a -> a infixl 7 / -- | Left division by a multiplicative group element. -- -- When * is commutative we must have: -- --
--   x \\ y = y / x
--   
(\\) :: (Multiplicative - Group) a => a -> a -> a infixl 7 \\ -- | Integral power of a multiplicative group element. -- --
--   one == a ^^ 0
--   
-- --
--   >>> 8 ^^ 0 :: Double
--   1.0
--   
--   >>> 8 ^^ 0 :: Pico
--   1.000000000000
--   
(^^) :: (Multiplicative - Group) a => a -> Integer -> a infixr 8 ^^ -- | Reciprocal of a multiplicative group element. -- --
--   x / y = x * recip y
--   x \\ y = recip x * y
--   
-- --
--   >>> recip (3 :+ 4) :: Complex Rational
--   3 % 25 :+ (-4) % 25
--   
--   >>> recip (3 :+ 4) :: Complex Double
--   0.12 :+ (-0.16)
--   
--   >>> recip (3 :+ 4) :: Complex Pico
--   0.120000000000 :+ -0.160000000000
--   
recip :: (Multiplicative - Group) a => a -> a type FieldLaw a = ((Additive - Group) a, (Multiplicative - Group) a) -- | A field. class (Ring a, Semifield a, FieldLaw a) => Field a -- | A type modeling the real numbers. class Field a => Real a -- | The one / zero value of the field. -- --
--   ninf = negate one / zero
--   
ninf :: Field a => a instance Data.Semifield.Real GHC.Real.Rational instance Data.Semifield.Real Data.Fixed.Uni instance Data.Semifield.Real Data.Fixed.Deci instance Data.Semifield.Real Data.Fixed.Centi instance Data.Semifield.Real Data.Fixed.Milli instance Data.Semifield.Real Data.Fixed.Micro instance Data.Semifield.Real Data.Fixed.Nano instance Data.Semifield.Real Data.Fixed.Pico instance Data.Semifield.Real GHC.Types.Float instance Data.Semifield.Real GHC.Types.Double instance Data.Semifield.Real Foreign.C.Types.CFloat instance Data.Semifield.Real Foreign.C.Types.CDouble instance Data.Semifield.Field a => Data.Semifield.Semifield (Data.Complex.Complex a) instance Data.Semifield.Field () instance Data.Semifield.Field GHC.Real.Rational instance Data.Semifield.Field Data.Fixed.Uni instance Data.Semifield.Field Data.Fixed.Deci instance Data.Semifield.Field Data.Fixed.Centi instance Data.Semifield.Field Data.Fixed.Milli instance Data.Semifield.Field Data.Fixed.Micro instance Data.Semifield.Field Data.Fixed.Nano instance Data.Semifield.Field Data.Fixed.Pico instance Data.Semifield.Field GHC.Types.Float instance Data.Semifield.Field GHC.Types.Double instance Data.Semifield.Field Foreign.C.Types.CFloat instance Data.Semifield.Field Foreign.C.Types.CDouble instance Data.Semifield.Field a => Data.Semifield.Field (Data.Complex.Complex a) instance Data.Semifield.Semifield () instance Data.Semifield.Semifield (GHC.Real.Ratio GHC.Natural.Natural) instance Data.Semifield.Semifield GHC.Real.Rational instance Data.Semifield.Semifield Data.Fixed.Uni instance Data.Semifield.Semifield Data.Fixed.Deci instance Data.Semifield.Semifield Data.Fixed.Centi instance Data.Semifield.Semifield Data.Fixed.Milli instance Data.Semifield.Semifield Data.Fixed.Micro instance Data.Semifield.Semifield Data.Fixed.Nano instance Data.Semifield.Semifield Data.Fixed.Pico instance Data.Semifield.Semifield GHC.Types.Float instance Data.Semifield.Semifield GHC.Types.Double instance Data.Semifield.Semifield Foreign.C.Types.CFloat instance Data.Semifield.Semifield Foreign.C.Types.CDouble module Data.Semimodule type Free f = (Representable f, Eq (Rep f)) type Basis b f = (Free f, Rep f ~ b) type Basis2 b c f g = (Basis b f, Basis c g) type Basis3 b c d f g h = (Basis b f, Basis c g, Basis d h) type FreeModule a f = (Free f, Bimodule a a (f a)) type FreeSemimodule a f = (Free f, Bisemimodule a a (f a)) type LeftModule l a = (Ring l, (Additive - Group) a, LeftSemimodule l a) -- | Left semimodule over a commutative semiring. -- -- All instances must satisfy the following identities: -- --
--   lscale s (x + y) = lscale s x + lscale s y
--   lscale (s1 + s2) x = lscale s1 x + lscale s2 x
--   lscale (s1 * s2) = lscale s1 . lscale s2
--   lscale zero = zero
--   
-- -- When the ring of coefficients s is unital we must additionally -- have: lscale one = id -- -- See the properties module for a detailed specification of the laws. class (Semiring l, (Additive - Monoid) a) => LeftSemimodule l a -- | Left-multiply by a scalar. lscale :: LeftSemimodule l a => l -> a -> a -- | Default definition of lscale for a free module. lscaleDef :: Semiring a => Functor f => a -> f a -> f a -- | Default definition of << for a commutative group. negateDef :: LeftModule Integer a => a -> a -- | Linearly interpolate between two vectors. -- --
--   >>> u = V3 (1 :% 1) (2 :% 1) (3 :% 1) :: V3 Rational
--   
--   >>> v = V3 (2 :% 1) (4 :% 1) (6 :% 1) :: V3 Rational
--   
--   >>> r = 1 :% 2 :: Rational
--   
--   >>> lerp r u v
--   V3 (6 % 4) (12 % 4) (18 % 4)
--   
lerp :: LeftModule r a => r -> a -> a -> a (*.) :: LeftSemimodule l a => l -> a -> a infixr 7 *. (/.) :: Semifield a => Functor f => a -> f a -> f a infixr 7 /. (\.) :: Semifield a => Functor f => a -> f a -> f a infixr 7 \. type RightModule r a = (Ring r, (Additive - Group) a, RightSemimodule r a) -- | Right semimodule over a commutative semiring. -- -- The laws for right semimodules are analagous to those of left -- semimodules. -- -- See the properties module for a detailed specification. class (Semiring r, (Additive - Monoid) a) => RightSemimodule r a -- | Right-multiply by a scalar. rscale :: RightSemimodule r a => r -> a -> a -- | Default definition of rscale for a free module. rscaleDef :: Semiring a => Functor f => a -> f a -> f a (.*) :: RightSemimodule r a => a -> r -> a infixl 7 .* (./) :: Semifield a => Functor f => f a -> a -> f a infixl 7 ./ (.\) :: Semifield a => Functor f => f a -> a -> f a infixl 7 .\ type Bimodule l r a = (LeftModule l a, RightModule r a, Bisemimodule l r a) -- | Bisemimodule over a commutative semiring. -- --
--   lscale l . rscale r = rscale r . lscale l
--   
class (LeftSemimodule l a, RightSemimodule r a) => Bisemimodule l r a discale :: Bisemimodule l r a => l -> r -> a -> a instance Data.Semiring.Semiring r => Data.Semimodule.Bisemimodule r r () instance Data.Semimodule.Bisemimodule r r a => Data.Semimodule.Bisemimodule r r (e -> a) instance (Data.Semimodule.Bisemimodule r r a, Data.Semimodule.Bisemimodule r r b) => Data.Semimodule.Bisemimodule r r (a, b) instance (Data.Semimodule.Bisemimodule r r a, Data.Semimodule.Bisemimodule r r b, Data.Semimodule.Bisemimodule r r c) => Data.Semimodule.Bisemimodule r r (a, b, c) instance Data.Semiring.Semiring a => Data.Semimodule.Bisemimodule a a (GHC.Real.Ratio a) instance Data.Semiring.Ring a => Data.Semimodule.Bisemimodule a a (Data.Complex.Complex a) instance Data.Semiring.Ring a => Data.Semimodule.Bisemimodule (Data.Complex.Complex a) (Data.Complex.Complex a) (Data.Complex.Complex a) instance Data.Semiring.Semiring r => Data.Semimodule.RightSemimodule r () instance (Data.Semigroup.Additive.-) Data.Semigroup.Additive.Additive GHC.Base.Monoid a => Data.Semimodule.RightSemimodule () a instance (Data.Semigroup.Additive.-) Data.Semigroup.Additive.Additive GHC.Base.Monoid a => Data.Semimodule.RightSemimodule GHC.Natural.Natural a instance ((Data.Semigroup.Additive.-) Data.Semigroup.Additive.Additive GHC.Base.Monoid a, (Data.Semigroup.Additive.-) Data.Semigroup.Additive.Additive Data.Group.Group a) => Data.Semimodule.RightSemimodule GHC.Integer.Type.Integer a instance Data.Semimodule.RightSemimodule r a => Data.Semimodule.RightSemimodule r (e -> a) instance (Data.Semimodule.RightSemimodule r a, Data.Semimodule.RightSemimodule r b) => Data.Semimodule.RightSemimodule r (a, b) instance (Data.Semimodule.RightSemimodule r a, Data.Semimodule.RightSemimodule r b, Data.Semimodule.RightSemimodule r c) => Data.Semimodule.RightSemimodule r (a, b, c) instance Data.Semiring.Semiring a => Data.Semimodule.RightSemimodule a (GHC.Real.Ratio a) instance Data.Semiring.Ring a => Data.Semimodule.RightSemimodule a (Data.Complex.Complex a) instance Data.Semiring.Ring a => Data.Semimodule.RightSemimodule (Data.Complex.Complex a) (Data.Complex.Complex a) instance Data.Semiring.Semiring l => Data.Semimodule.LeftSemimodule l () instance (Data.Semigroup.Additive.-) Data.Semigroup.Additive.Additive GHC.Base.Monoid a => Data.Semimodule.LeftSemimodule () a instance (Data.Semigroup.Additive.-) Data.Semigroup.Additive.Additive GHC.Base.Monoid a => Data.Semimodule.LeftSemimodule GHC.Natural.Natural a instance ((Data.Semigroup.Additive.-) Data.Semigroup.Additive.Additive GHC.Base.Monoid a, (Data.Semigroup.Additive.-) Data.Semigroup.Additive.Additive Data.Group.Group a) => Data.Semimodule.LeftSemimodule GHC.Integer.Type.Integer a instance Data.Semimodule.LeftSemimodule l a => Data.Semimodule.LeftSemimodule l (e -> a) instance (Data.Semimodule.LeftSemimodule l a, Data.Semimodule.LeftSemimodule l b) => Data.Semimodule.LeftSemimodule l (a, b) instance (Data.Semimodule.LeftSemimodule l a, Data.Semimodule.LeftSemimodule l b, Data.Semimodule.LeftSemimodule l c) => Data.Semimodule.LeftSemimodule l (a, b, c) instance Data.Semiring.Semiring a => Data.Semimodule.LeftSemimodule a (GHC.Real.Ratio a) instance Data.Semiring.Ring a => Data.Semimodule.LeftSemimodule a (Data.Complex.Complex a) instance Data.Semiring.Ring a => Data.Semimodule.LeftSemimodule (Data.Complex.Complex a) (Data.Complex.Complex a) module Data.Semimodule.Transform type f ** g = Compose f g infixr 2 ** type f ++ g = Product f g infixr 1 ++ -- | A dimensional (binary) relation between two bases. -- -- Dim b c relations correspond to (compositions of) -- permutation, projection, and embedding transformations. -- -- See also https://en.wikipedia.org/wiki/Logical_matrix. type Dim b c = forall a. Tran a b c -- | An endomorphism over a free semimodule. type Endo a b = Tran a b b -- | A morphism between free semimodules indexed with bases b and -- c. newtype Tran a b c Tran :: ((c -> a) -> b -> a) -> Tran a b c [runTran] :: Tran a b c -> (c -> a) -> b -> a -- | Apply a transformation to a vector. app :: Basis2 b c f g => Tran a b c -> g a -> f a -- | Lift a function on basis indices into a transformation. -- --
--   arr f = rmap f id
--   
arr :: (b -> c) -> Tran a b c -- | Tran a b c is an invariant functor on a. -- -- See also http://comonad.com/reader/2008/rotten-bananas/. invmap :: (a1 -> a2) -> (a2 -> a1) -> Tran a1 b c -> Tran a2 b c -- | Obtain a matrix by stacking rows. -- --
--   >>> rows (V2 1 2) :: M22 Int
--   V2 (V2 1 2) (V2 1 2)
--   
rows :: Basis2 b c f g => g a -> (f ** g) a -- | Obtain a matrix by stacking columns. -- --
--   >>> cols (V2 1 2) :: M22 Int
--   V2 (V2 1 1) (V2 2 2)
--   
cols :: Basis2 b c f g => f a -> (f ** g) a -- | Project onto the left-hand component of a direct sum. projl :: Basis2 b c f g => (f ++ g) a -> f a -- | Project onto the right-hand component of a direct sum. projr :: Basis2 b c f g => (f ++ g) a -> g a -- | Left (post) composition with a linear transformation. compl :: Basis3 b c d f1 f2 g => Dim b c -> (f2 ** g) a -> (f1 ** g) a -- | Right (pre) composition with a linear transformation. compr :: Basis3 b c d f g1 g2 => Dim c d -> (f ** g2) a -> (f ** g1) a -- | Left and right composition with a linear transformation. -- --
--   complr f g = compl f >>> compr g
--   
-- -- When f . g = id this induces a similarity transformation: -- --
--   >>> perm1 = arr (+ E32)
--   
--   >>> perm2 = arr (+ E33)
--   
--   >>> m = m33 1 2 3 4 5 6 7 8 9 :: M33 Int
--   
--   >>> complr perm1 perm2 m :: M33 Int
--   V3 (V3 5 6 4) (V3 8 9 7) (V3 2 3 1)
--   
-- -- See also https://en.wikipedia.org/wiki/Matrix_similarity & -- https://en.wikipedia.org/wiki/Conjugacy_class. complr :: Basis2 b1 c1 f1 f2 => Basis2 b2 c2 g1 g2 => Dim b1 c1 -> Dim b2 c2 -> (f2 ** g2) a -> (f1 ** g1) a -- | Transpose a matrix. -- --
--   >>> transpose (V3 (V2 1 2) (V2 3 4) (V2 5 6))
--   V2 (V3 1 3 5) (V3 2 4 6)
--   
-- --
--   >>> transpose $ m23 1 2 3 4 5 6 :: M32 Int
--   V3 (V2 1 4) (V2 2 5) (V2 3 6)
--   
transpose :: Basis2 b c f g => (f ** g) a -> (g ** f) a -- | Swap components of a tensor product. braid :: Dim (a, b) (b, a) -- | Swap components of a direct sum. sbraid :: Dim (a + b) (b + a) -- | Lift a transform into a transform on tensor products. first :: Dim b c -> Dim (b, d) (c, d) -- | Lift a transform into a transform on tensor products. second :: Dim b c -> Dim (d, b) (d, c) -- | Lift a transform into a transform on direct sums. left :: Dim b c -> Dim (b + d) (c + d) -- | Lift a transform into a transform on direct sums. right :: Dim b c -> Dim (d + b) (d + c) -- | Create a transform on a tensor product of semimodules. (***) :: Dim a1 b1 -> Dim a2 b2 -> Dim (a1, a2) (b1, b2) infixr 3 *** -- | Create a transform on a direct sum of semimodules. (+++) :: Dim a1 b1 -> Dim a2 b2 -> Dim (a1 + a2) (b1 + b2) infixr 2 +++ (&&&) :: Dim a b1 -> Dim a b2 -> Dim a (b1, b2) infixr 3 &&& (|||) :: Dim a1 b -> Dim a2 b -> Dim (a1 + a2) b infixr 2 ||| ($$$) :: Dim a (b -> c) -> Dim a b -> Dim a c infixr 0 $$$ -- |
--   adivide fork = id
--   
adivide :: (a -> (a1, a2)) -> Dim a1 b -> Dim a2 b -> Dim a b adivide' :: Dim a1 b -> Dim a2 b -> Dim (a1, a2) b -- |
--   aselect join = id
--   
aselect :: ((b1 + b2) -> b) -> Dim a b1 -> Dim a b2 -> Dim a b aselect' :: Dim a b1 -> Dim a b2 -> Dim a (b1 + b2) instance GHC.Base.Functor (Data.Semimodule.Transform.Tran a b) instance Control.Category.Category (Data.Semimodule.Transform.Tran a) instance Data.Profunctor.Unsafe.Profunctor (Data.Semimodule.Transform.Tran a) module Data.Semimodule.Basis data E1 E1 :: E1 e1 :: a -> E1 -> a fillE1 :: Basis E1 f => a -> f a data E2 E21 :: E2 E22 :: E2 e2 :: a -> a -> E2 -> a fillE2 :: Basis E2 f => a -> a -> f a data E3 E31 :: E3 E32 :: E3 E33 :: E3 e3 :: a -> a -> a -> E3 -> a fillE3 :: Basis E3 f => a -> a -> a -> f a data E4 E41 :: E4 E42 :: E4 E43 :: E4 E44 :: E4 e4 :: a -> a -> a -> a -> E4 -> a fillE4 :: Basis E4 f => a -> a -> a -> a -> f a data E6 E61 :: E6 E62 :: E6 E63 :: E6 E64 :: E6 E65 :: E6 E66 :: E6 instance GHC.Show.Show Data.Semimodule.Basis.E6 instance GHC.Classes.Ord Data.Semimodule.Basis.E6 instance GHC.Classes.Eq Data.Semimodule.Basis.E6 instance GHC.Show.Show Data.Semimodule.Basis.E5 instance GHC.Classes.Ord Data.Semimodule.Basis.E5 instance GHC.Classes.Eq Data.Semimodule.Basis.E5 instance GHC.Show.Show Data.Semimodule.Basis.E4 instance GHC.Classes.Ord Data.Semimodule.Basis.E4 instance GHC.Classes.Eq Data.Semimodule.Basis.E4 instance GHC.Show.Show Data.Semimodule.Basis.E3 instance GHC.Classes.Ord Data.Semimodule.Basis.E3 instance GHC.Classes.Eq Data.Semimodule.Basis.E3 instance GHC.Show.Show Data.Semimodule.Basis.E2 instance GHC.Classes.Ord Data.Semimodule.Basis.E2 instance GHC.Classes.Eq Data.Semimodule.Basis.E2 instance GHC.Show.Show Data.Semimodule.Basis.E1 instance GHC.Classes.Ord Data.Semimodule.Basis.E1 instance GHC.Classes.Eq Data.Semimodule.Basis.E1 module Data.Semimodule.Free type Free f = (Representable f, Eq (Rep f)) type Basis b f = (Free f, Rep f ~ b) type Basis2 b c f g = (Basis b f, Basis c g) type Basis3 b c d f g h = (Basis b f, Basis c g, Basis d h) (.*) :: RightSemimodule r a => a -> r -> a infixl 7 .* -- | Multiply a matrix on the right by a column vector. -- --
--   (.#) = app . tran
--   
-- --
--   >>> app (tran $ m23 1 2 3 4 5 6) (V3 7 8 9) :: V2 Int
--   V2 50 122
--   
--   >>> m23 1 2 3 4 5 6 .# V3 7 8 9 :: V2 Int
--   V2 50 122
--   
--   >>> m22 1 0 0 0 .# (m23 1 2 3 4 5 6 .# V3 7 8 9)
--   V2 50 0
--   
(.#) :: Semiring a => Foldable g => Basis2 b c f g => (f ** g) a -> g a -> f a infix 7 .# (*.) :: LeftSemimodule l a => l -> a -> a infixr 7 *. -- | Multiply a matrix on the left by a row vector. -- --
--   >>> V2 1 2 #. m23 3 4 5 6 7 8
--   V3 15 18 21
--   
-- --
--   >>> (V2 1 2 #. m23 3 4 5 6 7 8) #. m32 1 0 0 0 0 0
--   V2 15 0
--   
(#.) :: Semiring a => Foldable f => Basis2 b c f g => f a -> (f ** g) a -> g a infix 7 #. -- | Dot product. -- -- This is a variant of xmult restricted to free functors. -- --
--   >>> V3 1 2 3 `dot` V3 1 2 3
--   14
--   
dot :: Semiring a => Foldable f => Basis b f => f a -> f a -> a infix 6 `dot` -- | Linearly interpolate between two vectors. -- --
--   >>> u = V3 (1 :% 1) (2 :% 1) (3 :% 1) :: V3 Rational
--   
--   >>> v = V3 (2 :% 1) (4 :% 1) (6 :% 1) :: V3 Rational
--   
--   >>> r = 1 :% 2 :: Rational
--   
--   >>> lerp r u v
--   V3 (6 % 4) (12 % 4) (18 % 4)
--   
lerp :: LeftModule r a => r -> a -> a -> a -- | Squared l2 norm of a vector. quadrance :: Semiring a => Foldable f => Basis b f => f a -> a -- | Squared l2 norm of the difference between two vectors. qd :: FreeModule a f => Foldable f => f a -> f a -> a -- | Cross product -- --
--   a `cross' a = zero
--   a `cross' b = negate ( b `cross' a ) , 
--   a `cross' ( b + c ) = ( a `cross' b ) + ( a `cross' c ) , 
--   ( r a ) `cross' b = a `cross' ( r b ) = r ( a `cross' b ) . 
--   a `cross' ( b `cross' c ) + b `cross' ( c `cross' a ) + c `cross' ( a `cross' b ) = zero . 
--   
-- -- See Jacobi identity. cross :: Ring a => V3 a -> V3 a -> V3 a -- | Scalar triple product. -- --
--   triple x y z = triple z x y = triple y z x
--   triple x y z = negate $ triple x z y = negate $ triple y x z
--   triple x x y = triple x y y = triple x y x = zero
--   (triple x y z) *. x = (x `cross' y) `cross' (x `cross' z)
--   
-- --
--   >>> triple (V3 0 0 1) (V3 1 0 0) (V3 0 1 0) :: Double
--   1.0
--   
triple :: Ring a => V3 a -> V3 a -> V3 a -> a -- | Dirac delta function. dirac :: Eq i => Semiring a => i -> i -> a -- | Create a unit vector at an index. -- --
--   >>> idx E21 :: V2 Int
--   V2 1 0
--   
-- --
--   >>> idx E42 :: V4 Int
--   V4 0 1 0 0
--   
idx :: Semiring a => Basis b f => b -> f a -- | Retrieve an element of a vector. -- --
--   >>> elt E21 (V2 1 2)
--   1
--   
elt :: Basis b f => b -> f a -> a -- | Create a lens from a representable functor. lensRep :: Basis b f => b -> forall g. Functor g => (a -> g a) -> f a -> g (f a) -- | Create an indexed grate from a representable functor. grateRep :: Basis b f => forall g. Functor g => (b -> g a1 -> a2) -> g (f a1) -> f a2 -- | Multiply two matrices. -- --
--   >>> m22 1 2 3 4 .#. m22 1 2 3 4 :: M22 Int
--   Compose (V2 (V2 7 10) (V2 15 22))
--   
-- --
--   >>> m23 1 2 3 4 5 6 .#. m32 1 2 3 4 4 5 :: M22 Int
--   Compose (V2 (V2 19 25) (V2 43 58))
--   
(.#.) :: Semiring a => Foldable g => Basis3 b c d f g h => (f ** g) a -> (g ** h) a -> (f ** h) a infixr 7 .#. -- | Compute the trace of a matrix. -- --
--   >>> trace $ m22 1.0 2.0 3.0 4.0
--   5.0
--   
trace :: Semiring a => Foldable f => Basis b f => (f ** f) a -> a -- | Transpose a matrix. -- --
--   >>> transpose (V3 (V2 1 2) (V2 3 4) (V2 5 6))
--   V2 (V3 1 3 5) (V3 2 4 6)
--   
-- --
--   >>> transpose $ m23 1 2 3 4 5 6 :: M32 Int
--   V3 (V2 1 4) (V2 2 5) (V2 3 6)
--   
transpose :: Basis2 b c f g => (f ** g) a -> (g ** f) a -- | 1x1 matrix inverse over a field. -- --
--   >>> inv1 $ m11 4.0 :: M11 Double
--   Compose (V1 (V1 0.25))
--   
inv1 :: Field a => M11 a -> M11 a -- | 2x2 matrix inverse over a field. -- --
--   >>> inv2 $ m22 1 2 3 4 :: M22 Double
--   Compose (V2 (V2 (-2.0) 1.0) (V2 1.5 (-0.5)))
--   
inv2 :: Field a => M22 a -> M22 a -- | 2x2 matrix bdeterminant over a commutative semiring. -- --
--   >>> bdet2 $ m22 1 2 3 4
--   (4,6)
--   
bdet2 :: Semiring a => Basis2 E2 E2 f g => (f ** g) a -> (a, a) -- | 2x2 matrix determinant over a commutative ring. -- --
--   det2 = uncurry (-) . bdet2
--   
-- --
--   >>> det2 $ m22 1 2 3 4 :: Double
--   -2.0
--   
det2 :: Ring a => Basis2 E2 E2 f g => (f ** g) a -> a -- | 3x3 matrix bdeterminant over a commutative semiring. -- --
--   >>> bdet3 (V3 (V3 1 2 3) (V3 4 5 6) (V3 7 8 9))
--   (225, 225)
--   
bdet3 :: Semiring a => Basis2 E3 E3 f g => (f ** g) a -> (a, a) -- | 3x3 double-precision matrix determinant. -- --
--   det3 = uncurry (-) . bdet3
--   
-- -- Implementation uses a cofactor expansion to avoid loss of precision. -- --
--   >>> det3 $ m33 1 2 3 4 5 6 7 8 9
--   0
--   
det3 :: Ring a => Basis2 E3 E3 f g => (f ** g) a -> a -- | 3x3 matrix inverse. -- --
--   >>> inv3 $ m33 1 2 4 4 2 2 1 1 1 :: M33 Double
--   Compose (V3 (V3 0.0 0.5 (-1.0)) (V3 (-0.5) (-0.75) 3.5) (V3 0.5 0.25 (-1.5)))
--   
inv3 :: Field a => M33 a -> M33 a -- | 4x4 matrix bdeterminant over a commutative semiring. -- --
--   >>> bdet4 $ m44 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
--   (27728,27728)
--   
bdet4 :: Semiring a => Basis2 E4 E4 f g => (f ** g) a -> (a, a) -- | 4x4 matrix determinant over a commutative ring. -- --
--   det4 = uncurry (-) . bdet4
--   
-- -- This implementation uses a cofactor expansion to avoid loss of -- precision. -- --
--   >>> det4 $ m44 1 0 3 2 2 0 2 1 0 0 0 1 0 3 4 0 :: Rational
--   (-12) % 1
--   
det4 :: Ring a => Basis2 E4 E4 f g => (f ** g) a -> a -- | 4x4 matrix inverse. -- --
--   >>> row E41 . inv4 $ m44 1 0 3 2 2 0 2 1 0 0 0 1 0 3 4 0 :: V4 Rational
--   V4 (6 % (-12)) ((-9) % (-12)) ((-3) % (-12)) (0 % (-12))
--   
inv4 :: Field a => M44 a -> M44 a -- | Lift a matrix into a linear transformation -- --
--   (.#) = app . tran
--   
tran :: Semiring a => Basis2 b c f g => Foldable g => (f ** g) a -> Tran a b c -- | Retrieve an element of a matrix. -- --
--   >>> elt2 E21 E21 $ m22 1 2 3 4
--   1
--   
elt2 :: Basis2 b c f g => b -> c -> (f ** g) a -> a -- | Retrieve a row of a matrix. -- --
--   >>> row E22 $ m23 1 2 3 4 5 6
--   V3 4 5 6
--   
row :: Basis b f => b -> (f ** g) a -> g a -- | Obtain a matrix by stacking rows. -- --
--   >>> rows (V2 1 2) :: M22 Int
--   V2 (V2 1 2) (V2 1 2)
--   
rows :: Basis2 b c f g => g a -> (f ** g) a -- | Retrieve a column of a matrix. -- --
--   >>> elt E22 . col E31 $ m23 1 2 3 4 5 6
--   4
--   
col :: Basis2 b c f g => c -> (f ** g) a -> f a -- | Obtain a matrix by stacking columns. -- --
--   >>> cols (V2 1 2) :: M22 Int
--   V2 (V2 1 1) (V2 2 2)
--   
cols :: Basis2 b c f g => f a -> (f ** g) a -- | Obtain a diagonal matrix from a vector. -- --
--   >>> diag $ V2 2 3
--   Compose (V2 (V2 2 0) (V2 0 3))
--   
diag :: Semiring a => Basis b f => f a -> (f ** f) a -- | Outer product of two vectors. -- --
--   >>> V2 1 1 `outer` V2 1 1
--   Compose (V2 (V2 1 1) (V2 1 1))
--   
outer :: Semiring a => Basis2 b c f g => f a -> g a -> (f ** g) a -- | Identity matrix. -- --
--   >>> identity :: M33 Int
--   Compose (V3 (V3 1 0 0) (V3 0 1 0) (V3 0 0 1))
--   
identity :: Semiring a => Basis b f => (f ** f) a -- | Obtain the diagonal of a matrix as a vector. -- --
--   >>> diagonal $ m22 1.0 2.0 3.0 4.0
--   V2 1.0 4.0
--   
diagonal :: Representable f => (f ** f) a -> f a newtype V1 a V1 :: a -> V1 a unV1 :: V1 a -> a data V2 a V2 :: !a -> !a -> V2 a data V3 a V3 :: !a -> !a -> !a -> V3 a data V4 a V4 :: !a -> !a -> !a -> !a -> V4 a -- | A 1x1 matrix. type M11 = Compose V1 V1 -- | A 1x2 matrix. type M12 = Compose V1 V2 -- | A 1x3 matrix. type M13 = Compose V1 V3 -- | A 1x4 matrix. type M14 = Compose V1 V4 -- | A 2x1 matrix. type M21 = Compose V2 V1 -- | A 3x1 matrix. type M31 = Compose V3 V1 -- | A 4x1 matrix. type M41 = Compose V4 V1 -- | A 2x2 matrix. type M22 = Compose V2 V2 -- | A 2x3 matrix. type M23 = Compose V2 V3 -- | A 2x4 matrix. type M24 = Compose V2 V4 -- | A 3x2 matrix. type M32 = Compose V3 V2 -- | A 3x3 matrix. type M33 = Compose V3 V3 -- | A 3x4 matrix. type M34 = Compose V3 V4 -- | A 4x2 matrix. type M42 = Compose V4 V2 -- | A 4x3 matrix. type M43 = Compose V4 V3 -- | A 4x4 matrix. type M44 = Compose V4 V4 -- | Construct a 1x1 matrix. -- --
--   >>> m11 1 :: M11 Int
--   Compose (V1 (V1 1))
--   
m11 :: a -> M11 a -- | Construct a 1x2 matrix. -- --
--   >>> m12 1 2 :: M12 Int
--   Compose (V1 (V2 1 2))
--   
m12 :: a -> a -> M12 a -- | Construct a 1x3 matrix. -- --
--   >>> m13 1 2 3 :: M13 Int
--   Compose (V1 (V3 1 2 3))
--   
m13 :: a -> a -> a -> M13 a -- | Construct a 1x4 matrix. -- --
--   >>> m14 1 2 3 4 :: M14 Int
--   Compose (V1 (V4 1 2 3 4))
--   
m14 :: a -> a -> a -> a -> M14 a -- | Construct a 2x1 matrix. -- --
--   >>> m21 1 2 :: M21 Int
--   Compose (V2 (V1 1) (V1 2))
--   
m21 :: a -> a -> M21 a -- | Construct a 3x1 matrix. -- --
--   >>> m31 1 2 3 :: M31 Int
--   Compose (V3 (V1 1) (V1 2) (V1 3))
--   
m31 :: a -> a -> a -> M31 a -- | Construct a 4x1 matrix. -- --
--   >>> m41 1 2 3 4 :: M41 Int
--   Compose (V4 (V1 1) (V1 2) (V1 3) (V1 4))
--   
m41 :: a -> a -> a -> a -> M41 a -- | Construct a 2x2 matrix. -- -- Arguments are in row-major order. -- --
--   >>> m22 1 2 3 4 :: M22 Int
--   Compose (V2 (V2 1 2) (V2 3 4))
--   
m22 :: a -> a -> a -> a -> M22 a -- | Construct a 2x3 matrix. -- -- Arguments are in row-major order. m23 :: a -> a -> a -> a -> a -> a -> M23 a -- | Construct a 2x4 matrix. -- -- Arguments are in row-major order. m24 :: a -> a -> a -> a -> a -> a -> a -> a -> M24 a -- | Construct a 3x2 matrix. -- -- Arguments are in row-major order. m32 :: a -> a -> a -> a -> a -> a -> M32 a -- | Construct a 3x3 matrix. -- -- Arguments are in row-major order. m33 :: a -> a -> a -> a -> a -> a -> a -> a -> a -> M33 a -- | Construct a 3x4 matrix. -- -- Arguments are in row-major order. m34 :: a -> a -> a -> a -> a -> a -> a -> a -> a -> a -> a -> a -> M34 a -- | Construct a 4x2 matrix. -- -- Arguments are in row-major order. m42 :: a -> a -> a -> a -> a -> a -> a -> a -> M42 a -- | Construct a 4x3 matrix. -- -- Arguments are in row-major order. m43 :: a -> a -> a -> a -> a -> a -> a -> a -> a -> a -> a -> a -> M43 a -- | Construct a 4x4 matrix. -- -- Arguments are in row-major order. m44 :: a -> a -> a -> a -> a -> a -> a -> a -> a -> a -> a -> a -> a -> a -> a -> a -> M44 a instance GHC.Show.Show a => GHC.Show.Show (Data.Semimodule.Free.V4 a) instance GHC.Classes.Ord a => GHC.Classes.Ord (Data.Semimodule.Free.V4 a) instance GHC.Classes.Eq a => GHC.Classes.Eq (Data.Semimodule.Free.V4 a) instance GHC.Show.Show a => GHC.Show.Show (Data.Semimodule.Free.V3 a) instance GHC.Classes.Ord a => GHC.Classes.Ord (Data.Semimodule.Free.V3 a) instance GHC.Classes.Eq a => GHC.Classes.Eq (Data.Semimodule.Free.V3 a) instance GHC.Show.Show a => GHC.Show.Show (Data.Semimodule.Free.V2 a) instance GHC.Classes.Ord a => GHC.Classes.Ord (Data.Semimodule.Free.V2 a) instance GHC.Classes.Eq a => GHC.Classes.Eq (Data.Semimodule.Free.V2 a) instance GHC.Show.Show a => GHC.Show.Show (Data.Semimodule.Free.V1 a) instance GHC.Classes.Ord a => GHC.Classes.Ord (Data.Semimodule.Free.V1 a) instance GHC.Classes.Eq a => GHC.Classes.Eq (Data.Semimodule.Free.V1 a) instance (Data.Semigroup.Additive.-) Data.Semigroup.Additive.Additive GHC.Base.Semigroup a => GHC.Base.Semigroup (Data.Semigroup.Additive.Additive (Data.Semimodule.Free.M14 a)) instance (Data.Semigroup.Additive.-) Data.Semigroup.Additive.Additive GHC.Base.Monoid a => GHC.Base.Monoid (Data.Semigroup.Additive.Additive (Data.Semimodule.Free.M14 a)) instance (Data.Semigroup.Additive.-) Data.Semigroup.Additive.Additive Data.Group.Group a => Data.Magma.Magma (Data.Semigroup.Additive.Additive (Data.Semimodule.Free.M14 a)) instance (Data.Semigroup.Additive.-) Data.Semigroup.Additive.Additive Data.Group.Group a => Data.Group.Quasigroup (Data.Semigroup.Additive.Additive (Data.Semimodule.Free.M14 a)) instance (Data.Semigroup.Additive.-) Data.Semigroup.Additive.Additive Data.Group.Group a => Data.Group.Loop (Data.Semigroup.Additive.Additive (Data.Semimodule.Free.M14 a)) instance (Data.Semigroup.Additive.-) Data.Semigroup.Additive.Additive Data.Group.Group a => Data.Group.Group (Data.Semigroup.Additive.Additive (Data.Semimodule.Free.M14 a)) instance Data.Semiring.Semiring a => Data.Semimodule.LeftSemimodule (Data.Semimodule.Free.M11 a) (Data.Semimodule.Free.M14 a) instance Data.Semiring.Semiring a => Data.Semimodule.RightSemimodule (Data.Semimodule.Free.M44 a) (Data.Semimodule.Free.M14 a) instance Data.Semiring.Semiring a => Data.Semimodule.Bisemimodule (Data.Semimodule.Free.M11 a) (Data.Semimodule.Free.M44 a) (Data.Semimodule.Free.M14 a) instance (Data.Semigroup.Additive.-) Data.Semigroup.Additive.Additive GHC.Base.Semigroup a => GHC.Base.Semigroup (Data.Semigroup.Additive.Additive (Data.Semimodule.Free.M41 a)) instance (Data.Semigroup.Additive.-) Data.Semigroup.Additive.Additive GHC.Base.Monoid a => GHC.Base.Monoid (Data.Semigroup.Additive.Additive (Data.Semimodule.Free.M41 a)) instance (Data.Semigroup.Additive.-) Data.Semigroup.Additive.Additive Data.Group.Group a => Data.Magma.Magma (Data.Semigroup.Additive.Additive (Data.Semimodule.Free.M41 a)) instance (Data.Semigroup.Additive.-) Data.Semigroup.Additive.Additive Data.Group.Group a => Data.Group.Quasigroup (Data.Semigroup.Additive.Additive (Data.Semimodule.Free.M41 a)) instance (Data.Semigroup.Additive.-) Data.Semigroup.Additive.Additive Data.Group.Group a => Data.Group.Loop (Data.Semigroup.Additive.Additive (Data.Semimodule.Free.M41 a)) instance (Data.Semigroup.Additive.-) Data.Semigroup.Additive.Additive Data.Group.Group a => Data.Group.Group (Data.Semigroup.Additive.Additive (Data.Semimodule.Free.M41 a)) instance Data.Semiring.Semiring a => Data.Semimodule.LeftSemimodule (Data.Semimodule.Free.M44 a) (Data.Semimodule.Free.M41 a) instance Data.Semiring.Semiring a => Data.Semimodule.RightSemimodule (Data.Semimodule.Free.M11 a) (Data.Semimodule.Free.M41 a) instance Data.Semiring.Semiring a => Data.Semimodule.Bisemimodule (Data.Semimodule.Free.M44 a) (Data.Semimodule.Free.M11 a) (Data.Semimodule.Free.M41 a) instance (Data.Semigroup.Additive.-) Data.Semigroup.Additive.Additive GHC.Base.Semigroup a => GHC.Base.Semigroup (Data.Semigroup.Additive.Additive (Data.Semimodule.Free.M24 a)) instance (Data.Semigroup.Additive.-) Data.Semigroup.Additive.Additive GHC.Base.Monoid a => GHC.Base.Monoid (Data.Semigroup.Additive.Additive (Data.Semimodule.Free.M24 a)) instance (Data.Semigroup.Additive.-) Data.Semigroup.Additive.Additive Data.Group.Group a => Data.Magma.Magma (Data.Semigroup.Additive.Additive (Data.Semimodule.Free.M24 a)) instance (Data.Semigroup.Additive.-) Data.Semigroup.Additive.Additive Data.Group.Group a => Data.Group.Quasigroup (Data.Semigroup.Additive.Additive (Data.Semimodule.Free.M24 a)) instance (Data.Semigroup.Additive.-) Data.Semigroup.Additive.Additive Data.Group.Group a => Data.Group.Loop (Data.Semigroup.Additive.Additive (Data.Semimodule.Free.M24 a)) instance (Data.Semigroup.Additive.-) Data.Semigroup.Additive.Additive Data.Group.Group a => Data.Group.Group (Data.Semigroup.Additive.Additive (Data.Semimodule.Free.M24 a)) instance Data.Semiring.Semiring a => Data.Semimodule.LeftSemimodule (Data.Semimodule.Free.M22 a) (Data.Semimodule.Free.M24 a) instance Data.Semiring.Semiring a => Data.Semimodule.RightSemimodule (Data.Semimodule.Free.M44 a) (Data.Semimodule.Free.M24 a) instance Data.Semiring.Semiring a => Data.Semimodule.Bisemimodule (Data.Semimodule.Free.M22 a) (Data.Semimodule.Free.M44 a) (Data.Semimodule.Free.M24 a) instance (Data.Semigroup.Additive.-) Data.Semigroup.Additive.Additive GHC.Base.Semigroup a => GHC.Base.Semigroup (Data.Semigroup.Additive.Additive (Data.Semimodule.Free.M34 a)) instance (Data.Semigroup.Additive.-) Data.Semigroup.Additive.Additive GHC.Base.Monoid a => GHC.Base.Monoid (Data.Semigroup.Additive.Additive (Data.Semimodule.Free.M34 a)) instance (Data.Semigroup.Additive.-) Data.Semigroup.Additive.Additive Data.Group.Group a => Data.Magma.Magma (Data.Semigroup.Additive.Additive (Data.Semimodule.Free.M34 a)) instance (Data.Semigroup.Additive.-) Data.Semigroup.Additive.Additive Data.Group.Group a => Data.Group.Quasigroup (Data.Semigroup.Additive.Additive (Data.Semimodule.Free.M34 a)) instance (Data.Semigroup.Additive.-) Data.Semigroup.Additive.Additive Data.Group.Group a => Data.Group.Loop (Data.Semigroup.Additive.Additive (Data.Semimodule.Free.M34 a)) instance (Data.Semigroup.Additive.-) Data.Semigroup.Additive.Additive Data.Group.Group a => Data.Group.Group (Data.Semigroup.Additive.Additive (Data.Semimodule.Free.M34 a)) instance Data.Semiring.Semiring a => Data.Semimodule.LeftSemimodule (Data.Semimodule.Free.M33 a) (Data.Semimodule.Free.M34 a) instance Data.Semiring.Semiring a => Data.Semimodule.RightSemimodule (Data.Semimodule.Free.M44 a) (Data.Semimodule.Free.M34 a) instance Data.Semiring.Semiring a => Data.Semimodule.Bisemimodule (Data.Semimodule.Free.M33 a) (Data.Semimodule.Free.M44 a) (Data.Semimodule.Free.M34 a) instance (Data.Semigroup.Additive.-) Data.Semigroup.Additive.Additive GHC.Base.Semigroup a => GHC.Base.Semigroup (Data.Semigroup.Additive.Additive (Data.Semimodule.Free.M42 a)) instance (Data.Semigroup.Additive.-) Data.Semigroup.Additive.Additive GHC.Base.Monoid a => GHC.Base.Monoid (Data.Semigroup.Additive.Additive (Data.Semimodule.Free.M42 a)) instance (Data.Semigroup.Additive.-) Data.Semigroup.Additive.Additive Data.Group.Group a => Data.Magma.Magma (Data.Semigroup.Additive.Additive (Data.Semimodule.Free.M42 a)) instance (Data.Semigroup.Additive.-) Data.Semigroup.Additive.Additive Data.Group.Group a => Data.Group.Quasigroup (Data.Semigroup.Additive.Additive (Data.Semimodule.Free.M42 a)) instance (Data.Semigroup.Additive.-) Data.Semigroup.Additive.Additive Data.Group.Group a => Data.Group.Loop (Data.Semigroup.Additive.Additive (Data.Semimodule.Free.M42 a)) instance (Data.Semigroup.Additive.-) Data.Semigroup.Additive.Additive Data.Group.Group a => Data.Group.Group (Data.Semigroup.Additive.Additive (Data.Semimodule.Free.M42 a)) instance Data.Semiring.Semiring a => Data.Semimodule.LeftSemimodule (Data.Semimodule.Free.M44 a) (Data.Semimodule.Free.M42 a) instance Data.Semiring.Semiring a => Data.Semimodule.RightSemimodule (Data.Semimodule.Free.M22 a) (Data.Semimodule.Free.M42 a) instance Data.Semiring.Semiring a => Data.Semimodule.Bisemimodule (Data.Semimodule.Free.M44 a) (Data.Semimodule.Free.M22 a) (Data.Semimodule.Free.M42 a) instance (Data.Semigroup.Additive.-) Data.Semigroup.Additive.Additive GHC.Base.Semigroup a => GHC.Base.Semigroup (Data.Semigroup.Additive.Additive (Data.Semimodule.Free.M43 a)) instance (Data.Semigroup.Additive.-) Data.Semigroup.Additive.Additive GHC.Base.Monoid a => GHC.Base.Monoid (Data.Semigroup.Additive.Additive (Data.Semimodule.Free.M43 a)) instance (Data.Semigroup.Additive.-) Data.Semigroup.Additive.Additive Data.Group.Group a => Data.Magma.Magma (Data.Semigroup.Additive.Additive (Data.Semimodule.Free.M43 a)) instance (Data.Semigroup.Additive.-) Data.Semigroup.Additive.Additive Data.Group.Group a => Data.Group.Quasigroup (Data.Semigroup.Additive.Additive (Data.Semimodule.Free.M43 a)) instance (Data.Semigroup.Additive.-) Data.Semigroup.Additive.Additive Data.Group.Group a => Data.Group.Loop (Data.Semigroup.Additive.Additive (Data.Semimodule.Free.M43 a)) instance (Data.Semigroup.Additive.-) Data.Semigroup.Additive.Additive Data.Group.Group a => Data.Group.Group (Data.Semigroup.Additive.Additive (Data.Semimodule.Free.M43 a)) instance Data.Semiring.Semiring a => Data.Semimodule.LeftSemimodule (Data.Semimodule.Free.M44 a) (Data.Semimodule.Free.M43 a) instance Data.Semiring.Semiring a => Data.Semimodule.RightSemimodule (Data.Semimodule.Free.M33 a) (Data.Semimodule.Free.M43 a) instance Data.Semiring.Semiring a => Data.Semimodule.Bisemimodule (Data.Semimodule.Free.M44 a) (Data.Semimodule.Free.M33 a) (Data.Semimodule.Free.M43 a) instance (Data.Semigroup.Additive.-) Data.Semigroup.Additive.Additive GHC.Base.Semigroup a => GHC.Base.Semigroup (Data.Semigroup.Additive.Additive (Data.Semimodule.Free.M44 a)) instance (Data.Semigroup.Additive.-) Data.Semigroup.Additive.Additive GHC.Base.Monoid a => GHC.Base.Monoid (Data.Semigroup.Additive.Additive (Data.Semimodule.Free.M44 a)) instance (Data.Semigroup.Additive.-) Data.Semigroup.Additive.Additive Data.Group.Group a => Data.Magma.Magma (Data.Semigroup.Additive.Additive (Data.Semimodule.Free.M44 a)) instance (Data.Semigroup.Additive.-) Data.Semigroup.Additive.Additive Data.Group.Group a => Data.Group.Quasigroup (Data.Semigroup.Additive.Additive (Data.Semimodule.Free.M44 a)) instance (Data.Semigroup.Additive.-) Data.Semigroup.Additive.Additive Data.Group.Group a => Data.Group.Loop (Data.Semigroup.Additive.Additive (Data.Semimodule.Free.M44 a)) instance (Data.Semigroup.Additive.-) Data.Semigroup.Additive.Additive Data.Group.Group a => Data.Group.Group (Data.Semigroup.Additive.Additive (Data.Semimodule.Free.M44 a)) instance Data.Semiring.Semiring a => Data.Semimodule.LeftSemimodule (Data.Semimodule.Free.M44 a) (Data.Semimodule.Free.M44 a) instance Data.Semiring.Semiring a => Data.Semimodule.RightSemimodule (Data.Semimodule.Free.M44 a) (Data.Semimodule.Free.M44 a) instance Data.Semiring.Semiring a => Data.Semimodule.Bisemimodule (Data.Semimodule.Free.M44 a) (Data.Semimodule.Free.M44 a) (Data.Semimodule.Free.M44 a) instance Data.Semiring.Semiring a => GHC.Base.Semigroup (Data.Semigroup.Additive.Multiplicative (Data.Semimodule.Free.M44 a)) instance Data.Semiring.Semiring a => GHC.Base.Monoid (Data.Semigroup.Additive.Multiplicative (Data.Semimodule.Free.M44 a)) instance Data.Semiring.Semiring a => Data.Semiring.Presemiring (Data.Semimodule.Free.M44 a) instance Data.Semiring.Semiring a => Data.Semiring.Semiring (Data.Semimodule.Free.M44 a) instance Data.Semiring.Ring a => Data.Semiring.Ring (Data.Semimodule.Free.M44 a) instance Data.Functor.Classes.Show1 Data.Semimodule.Free.V4 instance GHC.Base.Functor Data.Semimodule.Free.V4 instance GHC.Base.Applicative Data.Semimodule.Free.V4 instance Data.Foldable.Foldable Data.Semimodule.Free.V4 instance Data.Semigroup.Foldable.Class.Foldable1 Data.Semimodule.Free.V4 instance Data.Distributive.Distributive Data.Semimodule.Free.V4 instance Data.Functor.Rep.Representable Data.Semimodule.Free.V4 instance (Data.Semigroup.Additive.-) Data.Semigroup.Additive.Additive GHC.Base.Semigroup a => GHC.Base.Semigroup (Data.Semigroup.Additive.Additive (Data.Semimodule.Free.V4 a)) instance (Data.Semigroup.Additive.-) Data.Semigroup.Additive.Additive GHC.Base.Monoid a => GHC.Base.Monoid (Data.Semigroup.Additive.Additive (Data.Semimodule.Free.V4 a)) instance (Data.Semigroup.Additive.-) Data.Semigroup.Additive.Additive Data.Group.Group a => Data.Magma.Magma (Data.Semigroup.Additive.Additive (Data.Semimodule.Free.V4 a)) instance (Data.Semigroup.Additive.-) Data.Semigroup.Additive.Additive Data.Group.Group a => Data.Group.Quasigroup (Data.Semigroup.Additive.Additive (Data.Semimodule.Free.V4 a)) instance (Data.Semigroup.Additive.-) Data.Semigroup.Additive.Additive Data.Group.Group a => Data.Group.Loop (Data.Semigroup.Additive.Additive (Data.Semimodule.Free.V4 a)) instance (Data.Semigroup.Additive.-) Data.Semigroup.Additive.Additive Data.Group.Group a => Data.Group.Group (Data.Semigroup.Additive.Additive (Data.Semimodule.Free.V4 a)) instance Data.Semiring.Semiring a => Data.Semimodule.LeftSemimodule a (Data.Semimodule.Free.V4 a) instance Data.Semiring.Semiring a => Data.Semimodule.RightSemimodule a (Data.Semimodule.Free.V4 a) instance Data.Semiring.Semiring a => Data.Semimodule.Bisemimodule a a (Data.Semimodule.Free.V4 a) instance (Data.Semigroup.Additive.-) Data.Semigroup.Additive.Additive GHC.Base.Semigroup a => GHC.Base.Semigroup (Data.Semigroup.Additive.Additive (Data.Semimodule.Free.M13 a)) instance (Data.Semigroup.Additive.-) Data.Semigroup.Additive.Additive GHC.Base.Monoid a => GHC.Base.Monoid (Data.Semigroup.Additive.Additive (Data.Semimodule.Free.M13 a)) instance (Data.Semigroup.Additive.-) Data.Semigroup.Additive.Additive Data.Group.Group a => Data.Magma.Magma (Data.Semigroup.Additive.Additive (Data.Semimodule.Free.M13 a)) instance (Data.Semigroup.Additive.-) Data.Semigroup.Additive.Additive Data.Group.Group a => Data.Group.Quasigroup (Data.Semigroup.Additive.Additive (Data.Semimodule.Free.M13 a)) instance (Data.Semigroup.Additive.-) Data.Semigroup.Additive.Additive Data.Group.Group a => Data.Group.Loop (Data.Semigroup.Additive.Additive (Data.Semimodule.Free.M13 a)) instance (Data.Semigroup.Additive.-) Data.Semigroup.Additive.Additive Data.Group.Group a => Data.Group.Group (Data.Semigroup.Additive.Additive (Data.Semimodule.Free.M13 a)) instance Data.Semiring.Semiring a => Data.Semimodule.LeftSemimodule (Data.Semimodule.Free.M11 a) (Data.Semimodule.Free.M13 a) instance Data.Semiring.Semiring a => Data.Semimodule.RightSemimodule (Data.Semimodule.Free.M33 a) (Data.Semimodule.Free.M13 a) instance Data.Semiring.Semiring a => Data.Semimodule.Bisemimodule (Data.Semimodule.Free.M11 a) (Data.Semimodule.Free.M33 a) (Data.Semimodule.Free.M13 a) instance (Data.Semigroup.Additive.-) Data.Semigroup.Additive.Additive GHC.Base.Semigroup a => GHC.Base.Semigroup (Data.Semigroup.Additive.Additive (Data.Semimodule.Free.M31 a)) instance (Data.Semigroup.Additive.-) Data.Semigroup.Additive.Additive GHC.Base.Monoid a => GHC.Base.Monoid (Data.Semigroup.Additive.Additive (Data.Semimodule.Free.M31 a)) instance (Data.Semigroup.Additive.-) Data.Semigroup.Additive.Additive Data.Group.Group a => Data.Magma.Magma (Data.Semigroup.Additive.Additive (Data.Semimodule.Free.M31 a)) instance (Data.Semigroup.Additive.-) Data.Semigroup.Additive.Additive Data.Group.Group a => Data.Group.Quasigroup (Data.Semigroup.Additive.Additive (Data.Semimodule.Free.M31 a)) instance (Data.Semigroup.Additive.-) Data.Semigroup.Additive.Additive Data.Group.Group a => Data.Group.Loop (Data.Semigroup.Additive.Additive (Data.Semimodule.Free.M31 a)) instance (Data.Semigroup.Additive.-) Data.Semigroup.Additive.Additive Data.Group.Group a => Data.Group.Group (Data.Semigroup.Additive.Additive (Data.Semimodule.Free.M31 a)) instance Data.Semiring.Semiring a => Data.Semimodule.LeftSemimodule (Data.Semimodule.Free.M33 a) (Data.Semimodule.Free.M31 a) instance Data.Semiring.Semiring a => Data.Semimodule.RightSemimodule (Data.Semimodule.Free.M11 a) (Data.Semimodule.Free.M31 a) instance Data.Semiring.Semiring a => Data.Semimodule.Bisemimodule (Data.Semimodule.Free.M33 a) (Data.Semimodule.Free.M11 a) (Data.Semimodule.Free.M31 a) instance (Data.Semigroup.Additive.-) Data.Semigroup.Additive.Additive GHC.Base.Semigroup a => GHC.Base.Semigroup (Data.Semigroup.Additive.Additive (Data.Semimodule.Free.M23 a)) instance (Data.Semigroup.Additive.-) Data.Semigroup.Additive.Additive GHC.Base.Monoid a => GHC.Base.Monoid (Data.Semigroup.Additive.Additive (Data.Semimodule.Free.M23 a)) instance (Data.Semigroup.Additive.-) Data.Semigroup.Additive.Additive Data.Group.Group a => Data.Magma.Magma (Data.Semigroup.Additive.Additive (Data.Semimodule.Free.M23 a)) instance (Data.Semigroup.Additive.-) Data.Semigroup.Additive.Additive Data.Group.Group a => Data.Group.Quasigroup (Data.Semigroup.Additive.Additive (Data.Semimodule.Free.M23 a)) instance (Data.Semigroup.Additive.-) Data.Semigroup.Additive.Additive Data.Group.Group a => Data.Group.Loop (Data.Semigroup.Additive.Additive (Data.Semimodule.Free.M23 a)) instance (Data.Semigroup.Additive.-) Data.Semigroup.Additive.Additive Data.Group.Group a => Data.Group.Group (Data.Semigroup.Additive.Additive (Data.Semimodule.Free.M23 a)) instance Data.Semiring.Semiring a => Data.Semimodule.LeftSemimodule (Data.Semimodule.Free.M22 a) (Data.Semimodule.Free.M23 a) instance Data.Semiring.Semiring a => Data.Semimodule.RightSemimodule (Data.Semimodule.Free.M33 a) (Data.Semimodule.Free.M23 a) instance Data.Semiring.Semiring a => Data.Semimodule.Bisemimodule (Data.Semimodule.Free.M22 a) (Data.Semimodule.Free.M33 a) (Data.Semimodule.Free.M23 a) instance (Data.Semigroup.Additive.-) Data.Semigroup.Additive.Additive GHC.Base.Semigroup a => GHC.Base.Semigroup (Data.Semigroup.Additive.Additive (Data.Semimodule.Free.M32 a)) instance (Data.Semigroup.Additive.-) Data.Semigroup.Additive.Additive GHC.Base.Monoid a => GHC.Base.Monoid (Data.Semigroup.Additive.Additive (Data.Semimodule.Free.M32 a)) instance (Data.Semigroup.Additive.-) Data.Semigroup.Additive.Additive Data.Group.Group a => Data.Magma.Magma (Data.Semigroup.Additive.Additive (Data.Semimodule.Free.M32 a)) instance (Data.Semigroup.Additive.-) Data.Semigroup.Additive.Additive Data.Group.Group a => Data.Group.Quasigroup (Data.Semigroup.Additive.Additive (Data.Semimodule.Free.M32 a)) instance (Data.Semigroup.Additive.-) Data.Semigroup.Additive.Additive Data.Group.Group a => Data.Group.Loop (Data.Semigroup.Additive.Additive (Data.Semimodule.Free.M32 a)) instance (Data.Semigroup.Additive.-) Data.Semigroup.Additive.Additive Data.Group.Group a => Data.Group.Group (Data.Semigroup.Additive.Additive (Data.Semimodule.Free.M32 a)) instance Data.Semiring.Semiring a => Data.Semimodule.LeftSemimodule (Data.Semimodule.Free.M33 a) (Data.Semimodule.Free.M32 a) instance Data.Semiring.Semiring a => Data.Semimodule.RightSemimodule (Data.Semimodule.Free.M22 a) (Data.Semimodule.Free.M32 a) instance Data.Semiring.Semiring a => Data.Semimodule.Bisemimodule (Data.Semimodule.Free.M33 a) (Data.Semimodule.Free.M22 a) (Data.Semimodule.Free.M32 a) instance (Data.Semigroup.Additive.-) Data.Semigroup.Additive.Additive GHC.Base.Semigroup a => GHC.Base.Semigroup (Data.Semigroup.Additive.Additive (Data.Semimodule.Free.M33 a)) instance (Data.Semigroup.Additive.-) Data.Semigroup.Additive.Additive GHC.Base.Monoid a => GHC.Base.Monoid (Data.Semigroup.Additive.Additive (Data.Semimodule.Free.M33 a)) instance (Data.Semigroup.Additive.-) Data.Semigroup.Additive.Additive Data.Group.Group a => Data.Magma.Magma (Data.Semigroup.Additive.Additive (Data.Semimodule.Free.M33 a)) instance (Data.Semigroup.Additive.-) Data.Semigroup.Additive.Additive Data.Group.Group a => Data.Group.Quasigroup (Data.Semigroup.Additive.Additive (Data.Semimodule.Free.M33 a)) instance (Data.Semigroup.Additive.-) Data.Semigroup.Additive.Additive Data.Group.Group a => Data.Group.Loop (Data.Semigroup.Additive.Additive (Data.Semimodule.Free.M33 a)) instance (Data.Semigroup.Additive.-) Data.Semigroup.Additive.Additive Data.Group.Group a => Data.Group.Group (Data.Semigroup.Additive.Additive (Data.Semimodule.Free.M33 a)) instance Data.Semiring.Semiring a => Data.Semimodule.LeftSemimodule (Data.Semimodule.Free.M33 a) (Data.Semimodule.Free.M33 a) instance Data.Semiring.Semiring a => Data.Semimodule.RightSemimodule (Data.Semimodule.Free.M33 a) (Data.Semimodule.Free.M33 a) instance Data.Semiring.Semiring a => Data.Semimodule.Bisemimodule (Data.Semimodule.Free.M33 a) (Data.Semimodule.Free.M33 a) (Data.Semimodule.Free.M33 a) instance Data.Semiring.Semiring a => GHC.Base.Semigroup (Data.Semigroup.Additive.Multiplicative (Data.Semimodule.Free.M33 a)) instance Data.Semiring.Semiring a => GHC.Base.Monoid (Data.Semigroup.Additive.Multiplicative (Data.Semimodule.Free.M33 a)) instance Data.Semiring.Semiring a => Data.Semiring.Presemiring (Data.Semimodule.Free.M33 a) instance Data.Semiring.Semiring a => Data.Semiring.Semiring (Data.Semimodule.Free.M33 a) instance Data.Semiring.Ring a => Data.Semiring.Ring (Data.Semimodule.Free.M33 a) instance Data.Functor.Classes.Eq1 Data.Semimodule.Free.V3 instance Data.Functor.Classes.Show1 Data.Semimodule.Free.V3 instance GHC.Base.Functor Data.Semimodule.Free.V3 instance GHC.Base.Applicative Data.Semimodule.Free.V3 instance Data.Foldable.Foldable Data.Semimodule.Free.V3 instance Data.Semigroup.Foldable.Class.Foldable1 Data.Semimodule.Free.V3 instance Data.Distributive.Distributive Data.Semimodule.Free.V3 instance Data.Functor.Rep.Representable Data.Semimodule.Free.V3 instance (Data.Semigroup.Additive.-) Data.Semigroup.Additive.Additive GHC.Base.Semigroup a => GHC.Base.Semigroup (Data.Semigroup.Additive.Additive (Data.Semimodule.Free.V3 a)) instance (Data.Semigroup.Additive.-) Data.Semigroup.Additive.Additive GHC.Base.Monoid a => GHC.Base.Monoid (Data.Semigroup.Additive.Additive (Data.Semimodule.Free.V3 a)) instance (Data.Semigroup.Additive.-) Data.Semigroup.Additive.Additive Data.Group.Group a => Data.Magma.Magma (Data.Semigroup.Additive.Additive (Data.Semimodule.Free.V3 a)) instance (Data.Semigroup.Additive.-) Data.Semigroup.Additive.Additive Data.Group.Group a => Data.Group.Quasigroup (Data.Semigroup.Additive.Additive (Data.Semimodule.Free.V3 a)) instance (Data.Semigroup.Additive.-) Data.Semigroup.Additive.Additive Data.Group.Group a => Data.Group.Loop (Data.Semigroup.Additive.Additive (Data.Semimodule.Free.V3 a)) instance (Data.Semigroup.Additive.-) Data.Semigroup.Additive.Additive Data.Group.Group a => Data.Group.Group (Data.Semigroup.Additive.Additive (Data.Semimodule.Free.V3 a)) instance Data.Semiring.Semiring a => Data.Semimodule.LeftSemimodule a (Data.Semimodule.Free.V3 a) instance Data.Semiring.Semiring a => Data.Semimodule.RightSemimodule a (Data.Semimodule.Free.V3 a) instance Data.Semiring.Semiring a => Data.Semimodule.Bisemimodule a a (Data.Semimodule.Free.V3 a) instance (Data.Semigroup.Additive.-) Data.Semigroup.Additive.Additive GHC.Base.Semigroup a => GHC.Base.Semigroup (Data.Semigroup.Additive.Additive (Data.Semimodule.Free.M12 a)) instance (Data.Semigroup.Additive.-) Data.Semigroup.Additive.Additive GHC.Base.Monoid a => GHC.Base.Monoid (Data.Semigroup.Additive.Additive (Data.Semimodule.Free.M12 a)) instance (Data.Semigroup.Additive.-) Data.Semigroup.Additive.Additive Data.Group.Group a => Data.Magma.Magma (Data.Semigroup.Additive.Additive (Data.Semimodule.Free.M12 a)) instance (Data.Semigroup.Additive.-) Data.Semigroup.Additive.Additive Data.Group.Group a => Data.Group.Quasigroup (Data.Semigroup.Additive.Additive (Data.Semimodule.Free.M12 a)) instance (Data.Semigroup.Additive.-) Data.Semigroup.Additive.Additive Data.Group.Group a => Data.Group.Loop (Data.Semigroup.Additive.Additive (Data.Semimodule.Free.M12 a)) instance (Data.Semigroup.Additive.-) Data.Semigroup.Additive.Additive Data.Group.Group a => Data.Group.Group (Data.Semigroup.Additive.Additive (Data.Semimodule.Free.M12 a)) instance Data.Semiring.Semiring a => Data.Semimodule.LeftSemimodule (Data.Semimodule.Free.M11 a) (Data.Semimodule.Free.M12 a) instance Data.Semiring.Semiring a => Data.Semimodule.RightSemimodule (Data.Semimodule.Free.M22 a) (Data.Semimodule.Free.M12 a) instance Data.Semiring.Semiring a => Data.Semimodule.Bisemimodule (Data.Semimodule.Free.M11 a) (Data.Semimodule.Free.M22 a) (Data.Semimodule.Free.M12 a) instance (Data.Semigroup.Additive.-) Data.Semigroup.Additive.Additive GHC.Base.Semigroup a => GHC.Base.Semigroup (Data.Semigroup.Additive.Additive (Data.Semimodule.Free.M21 a)) instance (Data.Semigroup.Additive.-) Data.Semigroup.Additive.Additive GHC.Base.Monoid a => GHC.Base.Monoid (Data.Semigroup.Additive.Additive (Data.Semimodule.Free.M21 a)) instance (Data.Semigroup.Additive.-) Data.Semigroup.Additive.Additive Data.Group.Group a => Data.Magma.Magma (Data.Semigroup.Additive.Additive (Data.Semimodule.Free.M21 a)) instance (Data.Semigroup.Additive.-) Data.Semigroup.Additive.Additive Data.Group.Group a => Data.Group.Quasigroup (Data.Semigroup.Additive.Additive (Data.Semimodule.Free.M21 a)) instance (Data.Semigroup.Additive.-) Data.Semigroup.Additive.Additive Data.Group.Group a => Data.Group.Loop (Data.Semigroup.Additive.Additive (Data.Semimodule.Free.M21 a)) instance (Data.Semigroup.Additive.-) Data.Semigroup.Additive.Additive Data.Group.Group a => Data.Group.Group (Data.Semigroup.Additive.Additive (Data.Semimodule.Free.M21 a)) instance Data.Semiring.Semiring a => Data.Semimodule.LeftSemimodule (Data.Semimodule.Free.M22 a) (Data.Semimodule.Free.M21 a) instance Data.Semiring.Semiring a => Data.Semimodule.RightSemimodule (Data.Semimodule.Free.M11 a) (Data.Semimodule.Free.M21 a) instance Data.Semiring.Semiring a => Data.Semimodule.Bisemimodule (Data.Semimodule.Free.M22 a) (Data.Semimodule.Free.M11 a) (Data.Semimodule.Free.M21 a) instance (Data.Semigroup.Additive.-) Data.Semigroup.Additive.Additive GHC.Base.Semigroup a => GHC.Base.Semigroup (Data.Semigroup.Additive.Additive (Data.Semimodule.Free.M22 a)) instance (Data.Semigroup.Additive.-) Data.Semigroup.Additive.Additive GHC.Base.Monoid a => GHC.Base.Monoid (Data.Semigroup.Additive.Additive (Data.Semimodule.Free.M22 a)) instance (Data.Semigroup.Additive.-) Data.Semigroup.Additive.Additive Data.Group.Group a => Data.Magma.Magma (Data.Semigroup.Additive.Additive (Data.Semimodule.Free.M22 a)) instance (Data.Semigroup.Additive.-) Data.Semigroup.Additive.Additive Data.Group.Group a => Data.Group.Quasigroup (Data.Semigroup.Additive.Additive (Data.Semimodule.Free.M22 a)) instance (Data.Semigroup.Additive.-) Data.Semigroup.Additive.Additive Data.Group.Group a => Data.Group.Loop (Data.Semigroup.Additive.Additive (Data.Semimodule.Free.M22 a)) instance (Data.Semigroup.Additive.-) Data.Semigroup.Additive.Additive Data.Group.Group a => Data.Group.Group (Data.Semigroup.Additive.Additive (Data.Semimodule.Free.M22 a)) instance Data.Semiring.Semiring a => Data.Semimodule.LeftSemimodule (Data.Semimodule.Free.M22 a) (Data.Semimodule.Free.M22 a) instance Data.Semiring.Semiring a => Data.Semimodule.RightSemimodule (Data.Semimodule.Free.M22 a) (Data.Semimodule.Free.M22 a) instance Data.Semiring.Semiring a => Data.Semimodule.Bisemimodule (Data.Semimodule.Free.M22 a) (Data.Semimodule.Free.M22 a) (Data.Semimodule.Free.M22 a) instance Data.Semiring.Semiring a => GHC.Base.Semigroup (Data.Semigroup.Additive.Multiplicative (Data.Semimodule.Free.M22 a)) instance Data.Semiring.Semiring a => GHC.Base.Monoid (Data.Semigroup.Additive.Multiplicative (Data.Semimodule.Free.M22 a)) instance Data.Semiring.Semiring a => Data.Semiring.Presemiring (Data.Semimodule.Free.M22 a) instance Data.Semiring.Semiring a => Data.Semiring.Semiring (Data.Semimodule.Free.M22 a) instance Data.Semiring.Ring a => Data.Semiring.Ring (Data.Semimodule.Free.M22 a) instance Data.Functor.Classes.Show1 Data.Semimodule.Free.V2 instance GHC.Base.Functor Data.Semimodule.Free.V2 instance GHC.Base.Applicative Data.Semimodule.Free.V2 instance Data.Foldable.Foldable Data.Semimodule.Free.V2 instance Data.Semigroup.Foldable.Class.Foldable1 Data.Semimodule.Free.V2 instance Data.Distributive.Distributive Data.Semimodule.Free.V2 instance Data.Functor.Rep.Representable Data.Semimodule.Free.V2 instance (Data.Semigroup.Additive.-) Data.Semigroup.Additive.Additive GHC.Base.Semigroup a => GHC.Base.Semigroup (Data.Semigroup.Additive.Additive (Data.Semimodule.Free.V2 a)) instance (Data.Semigroup.Additive.-) Data.Semigroup.Additive.Additive GHC.Base.Monoid a => GHC.Base.Monoid (Data.Semigroup.Additive.Additive (Data.Semimodule.Free.V2 a)) instance (Data.Semigroup.Additive.-) Data.Semigroup.Additive.Additive Data.Group.Group a => Data.Magma.Magma (Data.Semigroup.Additive.Additive (Data.Semimodule.Free.V2 a)) instance (Data.Semigroup.Additive.-) Data.Semigroup.Additive.Additive Data.Group.Group a => Data.Group.Quasigroup (Data.Semigroup.Additive.Additive (Data.Semimodule.Free.V2 a)) instance (Data.Semigroup.Additive.-) Data.Semigroup.Additive.Additive Data.Group.Group a => Data.Group.Loop (Data.Semigroup.Additive.Additive (Data.Semimodule.Free.V2 a)) instance (Data.Semigroup.Additive.-) Data.Semigroup.Additive.Additive Data.Group.Group a => Data.Group.Group (Data.Semigroup.Additive.Additive (Data.Semimodule.Free.V2 a)) instance Data.Semiring.Semiring a => Data.Semimodule.LeftSemimodule a (Data.Semimodule.Free.V2 a) instance Data.Semiring.Semiring a => Data.Semimodule.RightSemimodule a (Data.Semimodule.Free.V2 a) instance Data.Semiring.Semiring a => Data.Semimodule.Bisemimodule a a (Data.Semimodule.Free.V2 a) instance (Data.Semigroup.Additive.-) Data.Semigroup.Additive.Additive GHC.Base.Semigroup a => GHC.Base.Semigroup (Data.Semigroup.Additive.Additive (Data.Semimodule.Free.M11 a)) instance (Data.Semigroup.Additive.-) Data.Semigroup.Additive.Additive GHC.Base.Monoid a => GHC.Base.Monoid (Data.Semigroup.Additive.Additive (Data.Semimodule.Free.M11 a)) instance (Data.Semigroup.Additive.-) Data.Semigroup.Additive.Additive Data.Group.Group a => Data.Magma.Magma (Data.Semigroup.Additive.Additive (Data.Semimodule.Free.M11 a)) instance (Data.Semigroup.Additive.-) Data.Semigroup.Additive.Additive Data.Group.Group a => Data.Group.Quasigroup (Data.Semigroup.Additive.Additive (Data.Semimodule.Free.M11 a)) instance (Data.Semigroup.Additive.-) Data.Semigroup.Additive.Additive Data.Group.Group a => Data.Group.Loop (Data.Semigroup.Additive.Additive (Data.Semimodule.Free.M11 a)) instance (Data.Semigroup.Additive.-) Data.Semigroup.Additive.Additive Data.Group.Group a => Data.Group.Group (Data.Semigroup.Additive.Additive (Data.Semimodule.Free.M11 a)) instance Data.Semiring.Semiring a => Data.Semimodule.LeftSemimodule (Data.Semimodule.Free.M11 a) (Data.Semimodule.Free.M11 a) instance Data.Semiring.Semiring a => Data.Semimodule.RightSemimodule (Data.Semimodule.Free.M11 a) (Data.Semimodule.Free.M11 a) instance Data.Semiring.Semiring a => Data.Semimodule.Bisemimodule (Data.Semimodule.Free.M11 a) (Data.Semimodule.Free.M11 a) (Data.Semimodule.Free.M11 a) instance Data.Semiring.Semiring a => GHC.Base.Semigroup (Data.Semigroup.Additive.Multiplicative (Data.Semimodule.Free.M11 a)) instance Data.Semiring.Semiring a => GHC.Base.Monoid (Data.Semigroup.Additive.Multiplicative (Data.Semimodule.Free.M11 a)) instance Data.Semiring.Semiring a => Data.Semiring.Presemiring (Data.Semimodule.Free.M11 a) instance Data.Semiring.Semiring a => Data.Semiring.Semiring (Data.Semimodule.Free.M11 a) instance Data.Semiring.Ring a => Data.Semiring.Ring (Data.Semimodule.Free.M11 a) instance Data.Functor.Classes.Show1 Data.Semimodule.Free.V1 instance GHC.Base.Functor Data.Semimodule.Free.V1 instance GHC.Base.Applicative Data.Semimodule.Free.V1 instance Data.Foldable.Foldable Data.Semimodule.Free.V1 instance Data.Semigroup.Foldable.Class.Foldable1 Data.Semimodule.Free.V1 instance Data.Distributive.Distributive Data.Semimodule.Free.V1 instance Data.Functor.Rep.Representable Data.Semimodule.Free.V1 instance (Data.Semigroup.Additive.-) Data.Semigroup.Additive.Additive GHC.Base.Semigroup a => GHC.Base.Semigroup (Data.Semigroup.Additive.Additive (Data.Semimodule.Free.V1 a)) instance (Data.Semigroup.Additive.-) Data.Semigroup.Additive.Additive GHC.Base.Monoid a => GHC.Base.Monoid (Data.Semigroup.Additive.Additive (Data.Semimodule.Free.V1 a)) instance (Data.Semigroup.Additive.-) Data.Semigroup.Additive.Additive Data.Group.Group a => Data.Magma.Magma (Data.Semigroup.Additive.Additive (Data.Semimodule.Free.V1 a)) instance (Data.Semigroup.Additive.-) Data.Semigroup.Additive.Additive Data.Group.Group a => Data.Group.Quasigroup (Data.Semigroup.Additive.Additive (Data.Semimodule.Free.V1 a)) instance (Data.Semigroup.Additive.-) Data.Semigroup.Additive.Additive Data.Group.Group a => Data.Group.Loop (Data.Semigroup.Additive.Additive (Data.Semimodule.Free.V1 a)) instance (Data.Semigroup.Additive.-) Data.Semigroup.Additive.Additive Data.Group.Group a => Data.Group.Group (Data.Semigroup.Additive.Additive (Data.Semimodule.Free.V1 a)) instance Data.Semiring.Semiring a => Data.Semimodule.LeftSemimodule a (Data.Semimodule.Free.V1 a) instance Data.Semiring.Semiring a => Data.Semimodule.RightSemimodule a (Data.Semimodule.Free.V1 a) instance Data.Semiring.Semiring a => Data.Semimodule.Bisemimodule a a (Data.Semimodule.Free.V1 a) -- | See the connections package for idempotent & selective -- semirings, and lattices. module Data.Semiring.Property -- | <math> -- -- If R is non-unital (i.e. one is not distinct from -- zero) then it will instead satisfy a right-absorbtion property. -- -- This follows from right-neutrality and right-distributivity. -- -- When R is also left-distributive we get: <math> -- -- See also Warning and -- https://blogs.ncl.ac.uk/andreymokhov/united-monoids/#whatif. nonunital_on :: Presemiring r => Rel r b -> r -> r -> b -- | Presemiring morphisms are distributive semigroup morphisms. -- -- This is a required property for presemiring morphisms. morphism_presemiring :: Eq s => Presemiring r => Presemiring s => (r -> s) -> r -> r -> r -> Bool -- | <math> -- -- All semigroups must right-associate addition. -- -- This is a required property. associative_addition_on :: (Additive - Semigroup) r => Rel r b -> r -> r -> r -> b -- | <math> -- -- This is a an optional property for semigroups, and a -- required property for semirings. commutative_addition_on :: (Additive - Semigroup) r => Rel r b -> r -> r -> b -- | <math> -- -- All semigroups must right-associate multiplication. -- -- This is a required property. associative_multiplication_on :: (Multiplicative - Semigroup) r => Rel r b -> r -> r -> r -> b -- | <math> -- -- R must right-distribute multiplication. -- -- When R is a functor and the semiring structure is derived from -- Alternative, this translates to: -- --
--   (a <|> b) *> c = (a *> c) <|> (b *> c)
--   
-- -- See -- https://en.wikibooks.org/wiki/Haskell/Alternative_and_MonadPlus. -- -- This is a required property. distributive_on :: Presemiring r => Rel r b -> r -> r -> r -> b -- | <math> -- -- R must right-distribute multiplication over finite (non-empty) -- sums. -- -- For types with exact arithmetic this follows from -- distributive and the universality of fold1. distributive_finite1_on :: Presemiring r => Foldable1 f => Rel r b -> f r -> r -> b -- | <math> -- -- Presemiring morphisms must be compatible with right-distribution. morphism_distribitive_on :: Presemiring r => Presemiring s => Rel s b -> (r -> s) -> r -> r -> r -> b -- | Semiring morphisms are monoidal presemiring morphisms. -- -- This is a required property for semiring morphisms. morphism_semiring :: Eq s => Semiring r => Semiring s => (r -> s) -> r -> r -> r -> Bool -- | <math> -- -- A semigroup with a right-neutral additive identity must satisfy: -- --
--   neutral_addition zero = const True
--   
-- -- Or, equivalently: -- --
--   zero + r = r
--   
-- -- This is a required property for additive monoids. neutral_addition_on :: (Additive - Monoid) r => Rel r b -> r -> b -- | <math> -- -- A semigroup with a right-neutral multiplicative identity must satisfy: -- --
--   neutral_multiplication one = const True
--   
-- -- Or, equivalently: -- --
--   one * r = r
--   
-- -- This is a required propert for multiplicative monoids. neutral_multiplication_on :: (Multiplicative - Monoid) r => Rel r b -> r -> b -- | <math> -- -- A R is semiring then its addititive one must be -- right-annihilative, i.e.: -- --
--   zero * a ~~ zero
--   
-- -- For Alternative instances this property translates to: -- --
--   empty *> a ~~ empty
--   
-- -- This is a required property. annihilative_multiplication_on :: Semiring r => Rel r b -> r -> b -- | <math> -- -- R must right-distribute multiplication between finite sums. -- -- For types with exact arithmetic this follows from -- distributive & neutral_multiplication. distributive_finite_on :: Semiring r => Foldable f => Rel r b -> f r -> r -> b -- | <math> -- -- If R is also left-distributive then it supports -- xmult-multiplication. distributive_xmult_on :: Semiring r => Applicative f => Foldable f => Rel r b -> f r -> f r -> b -- | <math> -- -- If R is also left-distributive then it supports (non-empty) -- xmult-multiplication. distributive_xmult1_on :: Presemiring r => Apply f => Foldable1 f => Rel r b -> f r -> f r -> b -- | <math> -- -- This is a an optional property for semigroups, and a -- optional property for semirings. It is a required -- property for rings. commutative_multiplication_on :: (Multiplicative - Semigroup) r => Rel r b -> r -> r -> b -- | <math> -- -- If R is right-cancellative wrt addition then for all a -- the section (a +) is injective. -- -- See https://en.wikipedia.org/wiki/Cancellation_property cancellative_addition_on :: (Additive - Semigroup) r => Rel r Bool -> r -> r -> r -> Bool -- | <math> -- -- If R is right-cancellative wrt multiplication then for all -- a the section (a *) is injective. cancellative_multiplication_on :: (Multiplicative - Semigroup) r => Rel r Bool -> r -> r -> r -> Bool