-- Hoogle documentation, generated by Haddock -- See Hoogle, http://www.haskell.org/hoogle/ -- | A numeric prelude -- -- Classes for numbers, higher-dimension representable objects, and -- algebras that combine them. -- -- See NumHask.Examples for usage. @package numhask @version 0.0.7 -- | NumHask usage examples module NumHask.Examples -- | Magma module NumHask.Algebra.Magma -- | A Magma is a tuple (T,⊕) consisting of -- --
-- ∀ a, b ∈ T: a ⊕ b ∈ T ---- -- These laws are true by construction in haskell: the type signature of -- magma and the above mathematical laws are synonyms. class Magma a (⊕) :: Magma a => a -> a -> a -- | A Unital Magma -- --
-- unit ⊕ a = a -- a ⊕ unit = a --class Magma a => Unital a unit :: Unital a => a -- | An Associative Magma -- --
-- (a ⊕ b) ⊕ c = a ⊕ (b ⊕ c) --class Magma a => Associative a -- | A Commutative Magma -- --
-- a ⊕ b = b ⊕ a --class Magma a => Commutative a -- | An Invertible Magma -- --
-- ∀ a ∈ T: inv a ∈ T ---- -- law is true by construction in Haskell class Magma a => Invertible a inv :: Invertible a => a -> a -- | An Idempotent Magma -- --
-- a ⊕ a = a --class Magma a => Idempotent a -- | A Homomorph between two Magmas -- --
-- ∀ a ∈ A: hom a ∈ B ---- -- law is true by construction in Haskell class (Magma a, Magma b) => Homomorphic a b hom :: Homomorphic a b => a -> b -- | major conceptual clashidge with many other libraries class (Magma a, Magma b) => Isomorphic a b isomorph :: Isomorphic a b => (a -> b, b -> a) -- | A Monoidal Magma is associative and unital. class (Associative a, Unital a) => Monoidal a -- | A CMonoidal Magma is commutative, associative and unital. class (Commutative a, Associative a, Unital a) => CMonoidal a -- | A Loop is unital and invertible class (Unital a, Invertible a) => Loop a -- | A Group is associative, unital and invertible class (Associative a, Unital a, Invertible a) => Group a -- | see http://chris-taylor.github.io/blog/2013/02/25/xor-trick/ groupSwap :: (Group a) => (a, a) -> (a, a) -- | An Abelian Group is associative, unital, invertible and commutative class (Associative a, Unital a, Invertible a, Commutative a) => Abelian a instance NumHask.Algebra.Magma.Magma a => NumHask.Algebra.Magma.Homomorphic a a -- | A bit of extra Ordering taken from gaia. module NumHask.Algebra.Ordering -- | P's just to avoid name clashes class POrd s pcompare :: POrd s => s -> s -> POrdering -- | Equal to, Less than, Greater than, Not comparable to data POrdering PEQ :: POrdering PLT :: POrdering PGT :: POrdering PNC :: POrdering -- | Topped class POrd s => Topped s top :: Topped s => s -- | Bottomed class POrd s => Bottomed s bottom :: Bottomed s => s -- | Replaces the Bounded in base. Is this a good idea? class (Topped a, Bottomed a) => Bounded a -- | which creates a nice alternative for negate class (Lattice a, Isomorphic (Inf a) (Sup a)) => Negated a where negated a = coerce (fst isomorph (coerce a :: Inf a) :: Sup a) :: a negated :: Negated a => a -> a -- | Semilattice class (Associative a, Commutative a, Idempotent a) => Semilattice a -- | a nice Lattice, but the types explode the instance requirements class (Coercible a (Sup a), Coercible a (Inf a), Semilattice (Sup a), Semilattice (Inf a), POrd a) => Lattice a where type Inf a type Sup a (/\) = coerce ((⊕) :: Sup a -> Sup a -> Sup a) (\/) = coerce ((⊕) :: Inf a -> Inf a -> Inf a) where { type family Inf a; type family Sup a; } (/\) :: Lattice a => a -> a -> a (\/) :: Lattice a => a -> a -> a -- | conversion ord2pord :: Ordering -> POrdering instance GHC.Classes.Ord a => NumHask.Algebra.Ordering.POrd a instance NumHask.Algebra.Ordering.Topped GHC.Types.Int instance NumHask.Algebra.Ordering.Bottomed GHC.Types.Int instance NumHask.Algebra.Ordering.Bounded GHC.Types.Int instance NumHask.Algebra.Ordering.Topped GHC.Types.Bool instance NumHask.Algebra.Ordering.Bottomed GHC.Types.Bool instance NumHask.Algebra.Ordering.Bounded GHC.Types.Bool instance NumHask.Algebra.Magma.Magma NumHask.Algebra.Ordering.InfInt instance NumHask.Algebra.Magma.Magma NumHask.Algebra.Ordering.SupInt instance NumHask.Algebra.Magma.Associative NumHask.Algebra.Ordering.InfInt instance NumHask.Algebra.Magma.Associative NumHask.Algebra.Ordering.SupInt instance NumHask.Algebra.Magma.Commutative NumHask.Algebra.Ordering.SupInt instance NumHask.Algebra.Magma.Commutative NumHask.Algebra.Ordering.InfInt instance NumHask.Algebra.Magma.Idempotent NumHask.Algebra.Ordering.SupInt instance NumHask.Algebra.Magma.Idempotent NumHask.Algebra.Ordering.InfInt instance NumHask.Algebra.Magma.Homomorphic NumHask.Algebra.Ordering.SupInt NumHask.Algebra.Ordering.InfInt instance NumHask.Algebra.Magma.Homomorphic NumHask.Algebra.Ordering.InfInt NumHask.Algebra.Ordering.SupInt instance NumHask.Algebra.Magma.Isomorphic NumHask.Algebra.Ordering.SupInt NumHask.Algebra.Ordering.InfInt instance NumHask.Algebra.Magma.Isomorphic NumHask.Algebra.Ordering.InfInt NumHask.Algebra.Ordering.SupInt instance NumHask.Algebra.Ordering.Semilattice NumHask.Algebra.Ordering.SupInt instance NumHask.Algebra.Ordering.Semilattice NumHask.Algebra.Ordering.InfInt instance NumHask.Algebra.Ordering.Lattice GHC.Types.Int instance NumHask.Algebra.Magma.Magma NumHask.Algebra.Ordering.InfInteger instance NumHask.Algebra.Magma.Magma NumHask.Algebra.Ordering.SupInteger instance NumHask.Algebra.Magma.Associative NumHask.Algebra.Ordering.InfInteger instance NumHask.Algebra.Magma.Associative NumHask.Algebra.Ordering.SupInteger instance NumHask.Algebra.Magma.Commutative NumHask.Algebra.Ordering.SupInteger instance NumHask.Algebra.Magma.Commutative NumHask.Algebra.Ordering.InfInteger instance NumHask.Algebra.Magma.Idempotent NumHask.Algebra.Ordering.SupInteger instance NumHask.Algebra.Magma.Idempotent NumHask.Algebra.Ordering.InfInteger instance NumHask.Algebra.Magma.Homomorphic NumHask.Algebra.Ordering.SupInteger NumHask.Algebra.Ordering.InfInteger instance NumHask.Algebra.Magma.Homomorphic NumHask.Algebra.Ordering.InfInteger NumHask.Algebra.Ordering.SupInteger instance NumHask.Algebra.Magma.Isomorphic NumHask.Algebra.Ordering.SupInteger NumHask.Algebra.Ordering.InfInteger instance NumHask.Algebra.Magma.Isomorphic NumHask.Algebra.Ordering.InfInteger NumHask.Algebra.Ordering.SupInteger instance NumHask.Algebra.Ordering.Semilattice NumHask.Algebra.Ordering.SupInteger instance NumHask.Algebra.Ordering.Semilattice NumHask.Algebra.Ordering.InfInteger instance NumHask.Algebra.Ordering.Lattice GHC.Integer.Type.Integer instance NumHask.Algebra.Magma.Magma NumHask.Algebra.Ordering.InfFloat instance NumHask.Algebra.Magma.Magma NumHask.Algebra.Ordering.SupFloat instance NumHask.Algebra.Magma.Associative NumHask.Algebra.Ordering.InfFloat instance NumHask.Algebra.Magma.Associative NumHask.Algebra.Ordering.SupFloat instance NumHask.Algebra.Magma.Commutative NumHask.Algebra.Ordering.SupFloat instance NumHask.Algebra.Magma.Commutative NumHask.Algebra.Ordering.InfFloat instance NumHask.Algebra.Magma.Idempotent NumHask.Algebra.Ordering.SupFloat instance NumHask.Algebra.Magma.Idempotent NumHask.Algebra.Ordering.InfFloat instance NumHask.Algebra.Magma.Homomorphic NumHask.Algebra.Ordering.SupFloat NumHask.Algebra.Ordering.InfFloat instance NumHask.Algebra.Magma.Homomorphic NumHask.Algebra.Ordering.InfFloat NumHask.Algebra.Ordering.SupFloat instance NumHask.Algebra.Magma.Isomorphic NumHask.Algebra.Ordering.SupFloat NumHask.Algebra.Ordering.InfFloat instance NumHask.Algebra.Magma.Isomorphic NumHask.Algebra.Ordering.InfFloat NumHask.Algebra.Ordering.SupFloat instance NumHask.Algebra.Ordering.Semilattice NumHask.Algebra.Ordering.SupFloat instance NumHask.Algebra.Ordering.Semilattice NumHask.Algebra.Ordering.InfFloat instance NumHask.Algebra.Ordering.Lattice GHC.Types.Float instance NumHask.Algebra.Magma.Magma NumHask.Algebra.Ordering.InfDouble instance NumHask.Algebra.Magma.Magma NumHask.Algebra.Ordering.SupDouble instance NumHask.Algebra.Magma.Associative NumHask.Algebra.Ordering.InfDouble instance NumHask.Algebra.Magma.Associative NumHask.Algebra.Ordering.SupDouble instance NumHask.Algebra.Magma.Commutative NumHask.Algebra.Ordering.SupDouble instance NumHask.Algebra.Magma.Commutative NumHask.Algebra.Ordering.InfDouble instance NumHask.Algebra.Magma.Idempotent NumHask.Algebra.Ordering.SupDouble instance NumHask.Algebra.Magma.Idempotent NumHask.Algebra.Ordering.InfDouble instance NumHask.Algebra.Magma.Homomorphic NumHask.Algebra.Ordering.SupDouble NumHask.Algebra.Ordering.InfDouble instance NumHask.Algebra.Magma.Homomorphic NumHask.Algebra.Ordering.InfDouble NumHask.Algebra.Ordering.SupDouble instance NumHask.Algebra.Magma.Isomorphic NumHask.Algebra.Ordering.SupDouble NumHask.Algebra.Ordering.InfDouble instance NumHask.Algebra.Magma.Isomorphic NumHask.Algebra.Ordering.InfDouble NumHask.Algebra.Ordering.SupDouble instance NumHask.Algebra.Ordering.Semilattice NumHask.Algebra.Ordering.SupDouble instance NumHask.Algebra.Ordering.Semilattice NumHask.Algebra.Ordering.InfDouble instance NumHask.Algebra.Ordering.Lattice GHC.Types.Double -- | Additive Structure module NumHask.Algebra.Additive -- | plus is used for the additive magma to distinguish from -- + which, by convention, implies commutativity class AdditiveMagma a plus :: AdditiveMagma a => a -> a -> a -- | AdditiveUnital -- --
-- zero `plus` a == a -- a `plus` zero == a --class AdditiveMagma a => AdditiveUnital a zero :: AdditiveUnital a => a -- | AdditiveAssociative -- --
-- (a `plus` b) `plus` c == a `plus` (b `plus` c) --class AdditiveMagma a => AdditiveAssociative a -- | AdditiveCommutative -- --
-- a `plus` b == b `plus` a --class AdditiveMagma a => AdditiveCommutative a -- | AdditiveInvertible -- --
-- ∀ a ∈ A: negate a ∈ A ---- -- law is true by construction in Haskell class AdditiveMagma a => AdditiveInvertible a negate :: AdditiveInvertible a => a -> a -- | AdditiveHomomorphic -- --
-- ∀ a ∈ A: plushom a ∈ B ---- -- law is true by construction in Haskell class (AdditiveMagma b) => AdditiveHomomorphic a b plushom :: AdditiveHomomorphic a b => a -> b -- | AdditiveIdempotent -- --
-- a `plus` a == a --class AdditiveMagma a => AdditiveIdempotent a -- | AdditiveMonoidal class (AdditiveUnital a, AdditiveAssociative a) => AdditiveMonoidal a -- | Additive is commutative, unital and associative under addition -- --
-- a + b = b + a ---- --
-- (a + b) + c = a + (b + c) ---- --
-- zero + a = a ---- --
-- a + zero = a --class (AdditiveCommutative a, AdditiveUnital a, AdditiveAssociative a) => Additive a where a + b = plus a b (+) :: Additive a => a -> a -> a -- | Non-commutative right minus class (AdditiveUnital a, AdditiveAssociative a, AdditiveInvertible a) => AdditiveRightCancellative a where (-~) a b = a `plus` negate b (-~) :: AdditiveRightCancellative a => a -> a -> a -- | Non-commutative left minus class (AdditiveUnital a, AdditiveAssociative a, AdditiveInvertible a) => AdditiveLeftCancellative a where (~-) a b = negate b `plus` a (~-) :: AdditiveLeftCancellative a => a -> a -> a -- | AdditiveGroup -- --
-- a - a = zero ---- --
-- negate a = zero - a ---- --
-- negate a + a = zero --class (Additive a, AdditiveInvertible a) => AdditiveGroup a where (-) a b = a `plus` negate b (-) :: AdditiveGroup a => a -> a -> a instance NumHask.Algebra.Additive.AdditiveMagma GHC.Types.Double instance NumHask.Algebra.Additive.AdditiveMagma GHC.Types.Float instance NumHask.Algebra.Additive.AdditiveMagma GHC.Types.Int instance NumHask.Algebra.Additive.AdditiveMagma GHC.Integer.Type.Integer instance NumHask.Algebra.Additive.AdditiveMagma GHC.Types.Bool instance NumHask.Algebra.Additive.AdditiveMagma a => NumHask.Algebra.Additive.AdditiveMagma (Data.Complex.Complex a) instance NumHask.Algebra.Additive.AdditiveUnital GHC.Types.Double instance NumHask.Algebra.Additive.AdditiveUnital GHC.Types.Float instance NumHask.Algebra.Additive.AdditiveUnital GHC.Types.Int instance NumHask.Algebra.Additive.AdditiveUnital GHC.Integer.Type.Integer instance NumHask.Algebra.Additive.AdditiveUnital GHC.Types.Bool instance NumHask.Algebra.Additive.AdditiveUnital a => NumHask.Algebra.Additive.AdditiveUnital (Data.Complex.Complex a) instance NumHask.Algebra.Additive.AdditiveAssociative GHC.Types.Double instance NumHask.Algebra.Additive.AdditiveAssociative GHC.Types.Float instance NumHask.Algebra.Additive.AdditiveAssociative GHC.Types.Int instance NumHask.Algebra.Additive.AdditiveAssociative GHC.Integer.Type.Integer instance NumHask.Algebra.Additive.AdditiveAssociative GHC.Types.Bool instance NumHask.Algebra.Additive.AdditiveAssociative a => NumHask.Algebra.Additive.AdditiveAssociative (Data.Complex.Complex a) instance NumHask.Algebra.Additive.AdditiveCommutative GHC.Types.Double instance NumHask.Algebra.Additive.AdditiveCommutative GHC.Types.Float instance NumHask.Algebra.Additive.AdditiveCommutative GHC.Types.Int instance NumHask.Algebra.Additive.AdditiveCommutative GHC.Integer.Type.Integer instance NumHask.Algebra.Additive.AdditiveCommutative GHC.Types.Bool instance NumHask.Algebra.Additive.AdditiveCommutative a => NumHask.Algebra.Additive.AdditiveCommutative (Data.Complex.Complex a) instance NumHask.Algebra.Additive.AdditiveInvertible GHC.Types.Double instance NumHask.Algebra.Additive.AdditiveInvertible GHC.Types.Float instance NumHask.Algebra.Additive.AdditiveInvertible GHC.Types.Int instance NumHask.Algebra.Additive.AdditiveInvertible GHC.Integer.Type.Integer instance NumHask.Algebra.Additive.AdditiveInvertible GHC.Types.Bool instance NumHask.Algebra.Additive.AdditiveInvertible a => NumHask.Algebra.Additive.AdditiveInvertible (Data.Complex.Complex a) instance NumHask.Algebra.Additive.AdditiveMagma a => NumHask.Algebra.Additive.AdditiveHomomorphic a a instance NumHask.Algebra.Additive.AdditiveIdempotent GHC.Types.Bool instance NumHask.Algebra.Additive.AdditiveMonoidal GHC.Types.Double instance NumHask.Algebra.Additive.AdditiveMonoidal GHC.Types.Float instance NumHask.Algebra.Additive.AdditiveMonoidal GHC.Types.Int instance NumHask.Algebra.Additive.AdditiveMonoidal GHC.Integer.Type.Integer instance NumHask.Algebra.Additive.AdditiveMonoidal GHC.Types.Bool instance NumHask.Algebra.Additive.AdditiveMonoidal a => NumHask.Algebra.Additive.AdditiveMonoidal (Data.Complex.Complex a) instance NumHask.Algebra.Additive.Additive GHC.Types.Double instance NumHask.Algebra.Additive.Additive GHC.Types.Float instance NumHask.Algebra.Additive.Additive GHC.Types.Int instance NumHask.Algebra.Additive.Additive GHC.Integer.Type.Integer instance NumHask.Algebra.Additive.Additive GHC.Types.Bool instance NumHask.Algebra.Additive.Additive a => NumHask.Algebra.Additive.Additive (Data.Complex.Complex a) instance NumHask.Algebra.Additive.AdditiveGroup GHC.Types.Double instance NumHask.Algebra.Additive.AdditiveGroup GHC.Types.Float instance NumHask.Algebra.Additive.AdditiveGroup GHC.Types.Int instance NumHask.Algebra.Additive.AdditiveGroup GHC.Integer.Type.Integer instance NumHask.Algebra.Additive.AdditiveGroup a => NumHask.Algebra.Additive.AdditiveGroup (Data.Complex.Complex a) -- | Multiplicate structure Many treatments of a numeric tower treat -- multiplication differently to addition. NumHask treats these two as -- exactly symmetrical, and thus departs from the usual mathematical -- terminology. module NumHask.Algebra.Multiplicative -- | times is used for the multiplicative magma to distinguish from -- * which, by convention, implies commutativity class MultiplicativeMagma a times :: MultiplicativeMagma a => a -> a -> a -- | MultiplicativeUnital -- --
-- one `times` a == a -- a `times` one == a --class MultiplicativeMagma a => MultiplicativeUnital a one :: MultiplicativeUnital a => a -- | MultiplicativeAssociative -- --
-- (a `times` b) `times` c == a `times` (b `times` c) --class MultiplicativeMagma a => MultiplicativeAssociative a -- | MultiplicativeCommutative -- --
-- a `times` b == b `times` a --class MultiplicativeMagma a => MultiplicativeCommutative a -- | MultiplicativeInvertible -- --
-- ∀ a ∈ A: recip a ∈ A ---- -- law is true by construction in Haskell class MultiplicativeMagma a => MultiplicativeInvertible a recip :: MultiplicativeInvertible a => a -> a -- | MultiplicativeHomomorphic -- --
-- ∀ a ∈ A: timeshom a ∈ B ---- -- law is true by construction in Haskell class (MultiplicativeMagma b) => MultiplicativeHomomorphic a b timeshom :: MultiplicativeHomomorphic a b => a -> b -- | MultiplicativeMonoidal class (MultiplicativeUnital a, MultiplicativeAssociative a) => MultiplicativeMonoidal a -- | Multiplicative is commutative, associative and unital under -- multiplication -- --
-- a * b = b * a ---- --
-- (a * b) * c = a * (b * c) ---- --
-- one * a = a ---- --
-- a * one = a --class (MultiplicativeCommutative a, MultiplicativeUnital a, MultiplicativeAssociative a) => Multiplicative a where a * b = times a b (*) :: Multiplicative a => a -> a -> a -- | Non-commutative right divide class (MultiplicativeUnital a, MultiplicativeAssociative a, MultiplicativeInvertible a) => MultiplicativeRightCancellative a where a /~ b = a `times` recip b (/~) :: MultiplicativeRightCancellative a => a -> a -> a -- | Non-commutative left divide class (MultiplicativeUnital a, MultiplicativeAssociative a, MultiplicativeInvertible a) => MultiplicativeLeftCancellative a where a ~/ b = recip b `times` a (~/) :: MultiplicativeLeftCancellative a => a -> a -> a -- | MultiplicativeGroup -- --
-- a / a = one ---- --
-- recip a = one / a ---- --
-- recip a * a = one --class (Multiplicative a, MultiplicativeInvertible a) => MultiplicativeGroup a where (/) a b = a `times` recip b (/) :: MultiplicativeGroup a => a -> a -> a instance NumHask.Algebra.Multiplicative.MultiplicativeMagma GHC.Types.Double instance NumHask.Algebra.Multiplicative.MultiplicativeMagma GHC.Types.Float instance NumHask.Algebra.Multiplicative.MultiplicativeMagma GHC.Types.Int instance NumHask.Algebra.Multiplicative.MultiplicativeMagma GHC.Integer.Type.Integer instance NumHask.Algebra.Multiplicative.MultiplicativeMagma GHC.Types.Bool instance (NumHask.Algebra.Multiplicative.MultiplicativeMagma a, NumHask.Algebra.Additive.AdditiveGroup a) => NumHask.Algebra.Multiplicative.MultiplicativeMagma (Data.Complex.Complex a) instance NumHask.Algebra.Multiplicative.MultiplicativeUnital GHC.Types.Double instance NumHask.Algebra.Multiplicative.MultiplicativeUnital GHC.Types.Float instance NumHask.Algebra.Multiplicative.MultiplicativeUnital GHC.Types.Int instance NumHask.Algebra.Multiplicative.MultiplicativeUnital GHC.Integer.Type.Integer instance NumHask.Algebra.Multiplicative.MultiplicativeUnital GHC.Types.Bool instance (NumHask.Algebra.Additive.AdditiveUnital a, NumHask.Algebra.Additive.AdditiveGroup a, NumHask.Algebra.Multiplicative.MultiplicativeUnital a) => NumHask.Algebra.Multiplicative.MultiplicativeUnital (Data.Complex.Complex a) instance NumHask.Algebra.Multiplicative.MultiplicativeAssociative GHC.Types.Double instance NumHask.Algebra.Multiplicative.MultiplicativeAssociative GHC.Types.Float instance NumHask.Algebra.Multiplicative.MultiplicativeAssociative GHC.Types.Int instance NumHask.Algebra.Multiplicative.MultiplicativeAssociative GHC.Integer.Type.Integer instance NumHask.Algebra.Multiplicative.MultiplicativeAssociative GHC.Types.Bool instance (NumHask.Algebra.Additive.AdditiveGroup a, NumHask.Algebra.Multiplicative.MultiplicativeAssociative a) => NumHask.Algebra.Multiplicative.MultiplicativeAssociative (Data.Complex.Complex a) instance NumHask.Algebra.Multiplicative.MultiplicativeCommutative GHC.Types.Double instance NumHask.Algebra.Multiplicative.MultiplicativeCommutative GHC.Types.Float instance NumHask.Algebra.Multiplicative.MultiplicativeCommutative GHC.Types.Int instance NumHask.Algebra.Multiplicative.MultiplicativeCommutative GHC.Integer.Type.Integer instance NumHask.Algebra.Multiplicative.MultiplicativeCommutative GHC.Types.Bool instance (NumHask.Algebra.Additive.AdditiveGroup a, NumHask.Algebra.Multiplicative.MultiplicativeCommutative a) => NumHask.Algebra.Multiplicative.MultiplicativeCommutative (Data.Complex.Complex a) instance NumHask.Algebra.Multiplicative.MultiplicativeInvertible GHC.Types.Double instance NumHask.Algebra.Multiplicative.MultiplicativeInvertible GHC.Types.Float instance (NumHask.Algebra.Additive.AdditiveGroup a, NumHask.Algebra.Multiplicative.MultiplicativeInvertible a) => NumHask.Algebra.Multiplicative.MultiplicativeInvertible (Data.Complex.Complex a) instance NumHask.Algebra.Multiplicative.MultiplicativeMagma a => NumHask.Algebra.Multiplicative.MultiplicativeHomomorphic a a instance NumHask.Algebra.Multiplicative.MultiplicativeMonoidal GHC.Types.Double instance NumHask.Algebra.Multiplicative.MultiplicativeMonoidal GHC.Types.Float instance NumHask.Algebra.Multiplicative.MultiplicativeMonoidal GHC.Types.Int instance NumHask.Algebra.Multiplicative.MultiplicativeMonoidal GHC.Integer.Type.Integer instance NumHask.Algebra.Multiplicative.MultiplicativeMonoidal GHC.Types.Bool instance (NumHask.Algebra.Additive.AdditiveGroup a, NumHask.Algebra.Multiplicative.MultiplicativeMonoidal a) => NumHask.Algebra.Multiplicative.MultiplicativeMonoidal (Data.Complex.Complex a) instance NumHask.Algebra.Multiplicative.Multiplicative GHC.Types.Double instance NumHask.Algebra.Multiplicative.Multiplicative GHC.Types.Float instance NumHask.Algebra.Multiplicative.Multiplicative GHC.Types.Int instance NumHask.Algebra.Multiplicative.Multiplicative GHC.Integer.Type.Integer instance NumHask.Algebra.Multiplicative.Multiplicative GHC.Types.Bool instance (NumHask.Algebra.Additive.AdditiveGroup a, NumHask.Algebra.Multiplicative.Multiplicative a) => NumHask.Algebra.Multiplicative.Multiplicative (Data.Complex.Complex a) instance NumHask.Algebra.Multiplicative.MultiplicativeGroup GHC.Types.Double instance NumHask.Algebra.Multiplicative.MultiplicativeGroup GHC.Types.Float instance (NumHask.Algebra.Additive.AdditiveGroup a, NumHask.Algebra.Multiplicative.MultiplicativeGroup a) => NumHask.Algebra.Multiplicative.MultiplicativeGroup (Data.Complex.Complex a) -- | Highjacking Representables to provide a basis to provide -- element-by-element operations module NumHask.Algebra.Basis -- | AdditiveBasis element by element addition class (Representable m, Additive a) => AdditiveBasis m a where (.+.) = liftR2 (+) (.+.) :: AdditiveBasis m a => m a -> m a -> m a -- | AdditiveGroupBasis element by element subtraction class (Representable m, AdditiveGroup a) => AdditiveGroupBasis m a where (.-.) = liftR2 (-) (.-.) :: AdditiveGroupBasis m a => m a -> m a -> m a -- | MultiplicativeBasis element by element multiplication class (Representable m, Multiplicative a) => MultiplicativeBasis m a where (.*.) = liftR2 (*) (.*.) :: MultiplicativeBasis m a => m a -> m a -> m a -- | MultiplicativeGroupBasis element by element division class (Representable m, MultiplicativeGroup a) => MultiplicativeGroupBasis m a where (./.) = liftR2 (/) (./.) :: MultiplicativeGroupBasis m a => m a -> m a -> m a instance (Data.Functor.Rep.Representable r, NumHask.Algebra.Additive.Additive a) => NumHask.Algebra.Basis.AdditiveBasis r a instance (Data.Functor.Rep.Representable r, NumHask.Algebra.Additive.AdditiveGroup a) => NumHask.Algebra.Basis.AdditiveGroupBasis r a instance (Data.Functor.Rep.Representable r, NumHask.Algebra.Multiplicative.Multiplicative a) => NumHask.Algebra.Basis.MultiplicativeBasis r a instance (Data.Functor.Rep.Representable r, NumHask.Algebra.Multiplicative.MultiplicativeGroup a) => NumHask.Algebra.Basis.MultiplicativeGroupBasis r a -- | Distribution, avoiding name clashes with Distributive module NumHask.Algebra.Distribution -- | Distribution -- --
-- a * (b + c) == a * b + a * c ---- --
-- (a + b) * c == a * c + b * c --class (Additive a, MultiplicativeMagma a) => Distribution a instance NumHask.Algebra.Distribution.Distribution GHC.Types.Double instance NumHask.Algebra.Distribution.Distribution GHC.Types.Float instance NumHask.Algebra.Distribution.Distribution GHC.Types.Int instance NumHask.Algebra.Distribution.Distribution GHC.Integer.Type.Integer instance NumHask.Algebra.Distribution.Distribution GHC.Types.Bool instance (NumHask.Algebra.Additive.AdditiveGroup a, NumHask.Algebra.Distribution.Distribution a) => NumHask.Algebra.Distribution.Distribution (Data.Complex.Complex a) -- | Rings An interesting feature of the NumHask structure is the -- importance of the commutative Ring (CRing), which is a class -- often needed higher up the class tree. module NumHask.Algebra.Ring -- | a semiring class (Additive a, MultiplicativeAssociative a, MultiplicativeUnital a, Distribution a) => Semiring a -- | Ring class (AdditiveGroup a, MultiplicativeAssociative a, MultiplicativeUnital a, Distribution a) => Ring a -- | CRing is a Commutative Ring. It arises often due to * being defined as -- only multiplicative commutative. class (Multiplicative a, Ring a) => CRing a instance NumHask.Algebra.Ring.Semiring GHC.Types.Double instance NumHask.Algebra.Ring.Semiring GHC.Types.Float instance NumHask.Algebra.Ring.Semiring GHC.Types.Int instance NumHask.Algebra.Ring.Semiring GHC.Integer.Type.Integer instance NumHask.Algebra.Ring.Semiring GHC.Types.Bool instance (NumHask.Algebra.Additive.AdditiveGroup a, NumHask.Algebra.Ring.Semiring a) => NumHask.Algebra.Ring.Semiring (Data.Complex.Complex a) instance NumHask.Algebra.Ring.Ring GHC.Types.Double instance NumHask.Algebra.Ring.Ring GHC.Types.Float instance NumHask.Algebra.Ring.Ring GHC.Types.Int instance NumHask.Algebra.Ring.Ring GHC.Integer.Type.Integer instance NumHask.Algebra.Ring.Ring a => NumHask.Algebra.Ring.Ring (Data.Complex.Complex a) instance NumHask.Algebra.Ring.CRing GHC.Types.Double instance NumHask.Algebra.Ring.CRing GHC.Types.Float instance NumHask.Algebra.Ring.CRing GHC.Types.Int instance NumHask.Algebra.Ring.CRing GHC.Integer.Type.Integer instance NumHask.Algebra.Ring.CRing a => NumHask.Algebra.Ring.CRing (Data.Complex.Complex a) -- | Field module NumHask.Algebra.Field -- | Field class (AdditiveGroup a, MultiplicativeGroup a, Distribution a, Ring a) => Field a -- | ExpField class (Field a) => ExpField a where logBase a b = log b / log a (**) a b = exp (log a * b) sqrt a = a ** (one / (one + one)) exp :: ExpField a => a -> a log :: ExpField a => a -> a logBase :: ExpField a => a -> a -> a (**) :: ExpField a => a -> a -> a sqrt :: ExpField a => a -> a -- | quotient fields explode constraints if they are polymorphed to emit -- general integrals class (Field a) => QuotientField a round :: QuotientField a => a -> Integer ceiling :: QuotientField a => a -> Integer floor :: QuotientField a => a -> Integer (^^) :: QuotientField a => a -> Integer -> a -- | providing the concepts of infinity and NaN, thus moving away from -- error throwing class (Field a) => BoundedField a where maxBound = one / zero minBound = negate (one / zero) nan = zero / zero maxBound :: BoundedField a => a minBound :: BoundedField a => a nan :: BoundedField a => a isNaN :: BoundedField a => a -> Bool -- | prints as Infinity infinity :: BoundedField a => a -- | prints as `-Infinity` neginfinity :: BoundedField a => a instance NumHask.Algebra.Field.Field GHC.Types.Double instance NumHask.Algebra.Field.Field GHC.Types.Float instance NumHask.Algebra.Field.Field a => NumHask.Algebra.Field.Field (Data.Complex.Complex a) instance NumHask.Algebra.Field.ExpField GHC.Types.Double instance NumHask.Algebra.Field.ExpField GHC.Types.Float instance NumHask.Algebra.Field.ExpField a => NumHask.Algebra.Field.ExpField (Data.Complex.Complex a) instance NumHask.Algebra.Field.QuotientField GHC.Types.Float instance NumHask.Algebra.Field.QuotientField GHC.Types.Double instance NumHask.Algebra.Field.BoundedField GHC.Types.Float instance NumHask.Algebra.Field.BoundedField GHC.Types.Double instance NumHask.Algebra.Field.BoundedField a => NumHask.Algebra.Field.BoundedField (Data.Complex.Complex a) -- | Metric structure module NumHask.Algebra.Metric -- | distance between numbers class Metric a b distance :: Metric a b => a -> a -> b -- | Normed is a current wart on the NumHask api, causing all sorts of -- runaway constraint boiler-plate. class Normed a b size :: Normed a b => a -> b -- | abs and signnum are warts on the standard Num class, and are -- separated here to provide a cleaner structure. class (AdditiveUnital a, AdditiveGroup a, MultiplicativeUnital a) => Signed a sign :: Signed a => a -> a abs :: Signed a => a -> a -- | This should probably be split off into some sort of alternative -- Equality logic, but to what end? class (AdditiveGroup a) => Epsilon a nearZero :: Epsilon a => a -> Bool aboutEqual :: Epsilon a => a -> a -> Bool -- | utf ??? (≈) :: (Epsilon a) => a -> a -> Bool infixl 4 ≈ instance NumHask.Algebra.Metric.Signed GHC.Types.Double instance NumHask.Algebra.Metric.Signed GHC.Types.Float instance NumHask.Algebra.Metric.Signed GHC.Types.Int instance NumHask.Algebra.Metric.Signed GHC.Integer.Type.Integer instance NumHask.Algebra.Metric.Normed GHC.Types.Double GHC.Types.Double instance NumHask.Algebra.Metric.Normed GHC.Types.Float GHC.Types.Float instance NumHask.Algebra.Metric.Normed GHC.Types.Int GHC.Types.Int instance NumHask.Algebra.Metric.Normed GHC.Integer.Type.Integer GHC.Integer.Type.Integer instance (NumHask.Algebra.Multiplicative.Multiplicative a, NumHask.Algebra.Field.ExpField a, NumHask.Algebra.Metric.Normed a a) => NumHask.Algebra.Metric.Normed (Data.Complex.Complex a) a instance NumHask.Algebra.Metric.Epsilon GHC.Types.Double instance NumHask.Algebra.Metric.Epsilon GHC.Types.Float instance NumHask.Algebra.Metric.Epsilon GHC.Types.Int instance NumHask.Algebra.Metric.Epsilon GHC.Integer.Type.Integer instance NumHask.Algebra.Metric.Epsilon a => NumHask.Algebra.Metric.Epsilon (Data.Complex.Complex a) instance NumHask.Algebra.Metric.Metric GHC.Types.Double GHC.Types.Double instance NumHask.Algebra.Metric.Metric GHC.Types.Float GHC.Types.Float instance NumHask.Algebra.Metric.Metric GHC.Types.Int GHC.Types.Int instance NumHask.Algebra.Metric.Metric GHC.Integer.Type.Integer GHC.Integer.Type.Integer instance (NumHask.Algebra.Multiplicative.Multiplicative a, NumHask.Algebra.Field.ExpField a, NumHask.Algebra.Metric.Normed a a) => NumHask.Algebra.Metric.Metric (Data.Complex.Complex a) a -- | Integral domains module NumHask.Algebra.Integral -- | Integral -- --
-- b == zero || b * (a `div` b) + (a `mod` b) == a --class (Ring a) => Integral a where div a1 a2 = fst (divMod a1 a2) mod a1 a2 = snd (divMod a1 a2) -- | truncates towards negative infinity div :: Integral a => a -> a -> a mod :: Integral a => a -> a -> a divMod :: Integral a => a -> a -> (a, a) -- | toInteger and fromInteger as per the base Num instance is -- problematic for numbers with a Basis class ToInteger a toInteger :: ToInteger a => a -> Integer -- | fromInteger class (Ring a) => FromInteger a fromInteger :: FromInteger a => Integer -> a -- | This splitting away of fromInteger from the Ring instance tends -- to increase constraint boier-plate fromIntegral :: (ToInteger a, FromInteger b) => a -> b instance NumHask.Algebra.Integral.Integral GHC.Types.Int instance NumHask.Algebra.Integral.Integral GHC.Integer.Type.Integer instance NumHask.Algebra.Integral.FromInteger GHC.Types.Double instance NumHask.Algebra.Integral.FromInteger GHC.Types.Float instance NumHask.Algebra.Integral.FromInteger GHC.Types.Int instance NumHask.Algebra.Integral.FromInteger GHC.Integer.Type.Integer instance NumHask.Algebra.Integral.ToInteger GHC.Types.Int instance NumHask.Algebra.Integral.ToInteger GHC.Integer.Type.Integer -- | Algebra module NumHask.Algebra.Module -- | AdditiveModule class (Representable m, Additive a) => AdditiveModule m a where m .+ a = fmap (a +) m a +. m = fmap (a +) m (.+) :: AdditiveModule m a => m a -> a -> m a (+.) :: AdditiveModule m a => a -> m a -> m a -- | AdditiveGroupModule class (Representable m, AdditiveGroup a) => AdditiveGroupModule m a where m .- a = fmap (\ x -> x - a) m a -. m = fmap (\ x -> a - x) m (.-) :: AdditiveGroupModule m a => m a -> a -> m a (-.) :: AdditiveGroupModule m a => a -> m a -> m a -- | MultiplicativeModule class (Representable m, Multiplicative a) => MultiplicativeModule m a where m .* a = fmap (a *) m a *. m = fmap (a *) m (.*) :: MultiplicativeModule m a => m a -> a -> m a (*.) :: MultiplicativeModule m a => a -> m a -> m a -- | MultiplicativeGroupModule class (Representable m, MultiplicativeGroup a) => MultiplicativeGroupModule m a where m ./ a = fmap (/ a) m a /. m = fmap (\ x -> a / x) m (./) :: MultiplicativeGroupModule m a => m a -> a -> m a (/.) :: MultiplicativeGroupModule m a => a -> m a -> m a -- | Banach class (Representable m, ExpField a, Normed (m a) a) => Banach m a where normalize a = a ./ size a normalize :: Banach m a => m a -> m a -- | Hilbert class (Additive (m a)) => Hilbert m a (<.>) :: Hilbert m a => m a -> m a -> a -- | tensorial tomfoolery -- | TensorAlgebra class TensorProduct a (><) :: TensorProduct a => a -> a -> (a >< a) timesleft :: TensorProduct a => a -> (a >< a) -> a timesright :: TensorProduct a => (a >< a) -> a -> a instance (Data.Functor.Rep.Representable r, NumHask.Algebra.Additive.Additive a) => NumHask.Algebra.Module.AdditiveModule r a instance (Data.Functor.Rep.Representable r, NumHask.Algebra.Additive.AdditiveGroup a) => NumHask.Algebra.Module.AdditiveGroupModule r a instance (Data.Functor.Rep.Representable r, NumHask.Algebra.Multiplicative.Multiplicative a) => NumHask.Algebra.Module.MultiplicativeModule r a instance (Data.Functor.Rep.Representable r, NumHask.Algebra.Multiplicative.MultiplicativeGroup a) => NumHask.Algebra.Module.MultiplicativeGroupModule r a instance (NumHask.Algebra.Metric.Normed (r a) a, NumHask.Algebra.Field.ExpField a, Data.Functor.Rep.Representable r) => NumHask.Algebra.Module.Banach r a instance (NumHask.Algebra.Additive.Additive (r a), Data.Foldable.Foldable r, Data.Functor.Rep.Representable r, NumHask.Algebra.Ring.CRing a) => NumHask.Algebra.Module.Hilbert r a instance (NumHask.Algebra.Additive.AdditiveGroup (r a), Data.Foldable.Foldable r, Data.Functor.Rep.Representable r, NumHask.Algebra.Ring.CRing a) => NumHask.Algebra.Module.TensorProduct (r a) -- | A prelude for NumHask module NumHask.Prelude -- | multi-dimensional representable numbers module NumHask.Naperian class (HasShape f, Representable f) => Naperian f -- | ToDo: integrate with Naperian instance class HasShape f where type Shape f where { type family Shape f; } shape :: HasShape f => f a -> Shape f ndim :: HasShape f => f a -> Int instance (NumHask.Naperian.Naperian f, NumHask.Algebra.Additive.AdditiveMagma a) => NumHask.Algebra.Additive.AdditiveMagma (f a) instance (NumHask.Naperian.Naperian f, NumHask.Algebra.Additive.AdditiveUnital a) => NumHask.Algebra.Additive.AdditiveUnital (f a) instance (NumHask.Naperian.Naperian f, NumHask.Algebra.Additive.AdditiveAssociative a) => NumHask.Algebra.Additive.AdditiveAssociative (f a) instance (NumHask.Naperian.Naperian f, NumHask.Algebra.Additive.AdditiveCommutative a) => NumHask.Algebra.Additive.AdditiveCommutative (f a) instance (NumHask.Naperian.Naperian f, NumHask.Algebra.Additive.AdditiveInvertible a) => NumHask.Algebra.Additive.AdditiveInvertible (f a) instance (NumHask.Naperian.Naperian f, NumHask.Algebra.Additive.AdditiveMagma a) => NumHask.Algebra.Additive.AdditiveHomomorphic a (f a) instance (NumHask.Naperian.Naperian f, NumHask.Algebra.Additive.AdditiveMonoidal a) => NumHask.Algebra.Additive.AdditiveMonoidal (f a) instance (NumHask.Naperian.Naperian f, NumHask.Algebra.Additive.Additive a) => NumHask.Algebra.Additive.Additive (f a) instance (NumHask.Naperian.Naperian f, NumHask.Algebra.Additive.AdditiveGroup a) => NumHask.Algebra.Additive.AdditiveGroup (f a) instance (NumHask.Naperian.Naperian f, NumHask.Algebra.Multiplicative.MultiplicativeMagma a) => NumHask.Algebra.Multiplicative.MultiplicativeMagma (f a) instance (NumHask.Naperian.Naperian f, NumHask.Algebra.Multiplicative.MultiplicativeUnital a) => NumHask.Algebra.Multiplicative.MultiplicativeUnital (f a) instance (NumHask.Naperian.Naperian f, NumHask.Algebra.Multiplicative.MultiplicativeAssociative a) => NumHask.Algebra.Multiplicative.MultiplicativeAssociative (f a) instance (NumHask.Naperian.Naperian f, NumHask.Algebra.Multiplicative.MultiplicativeCommutative a) => NumHask.Algebra.Multiplicative.MultiplicativeCommutative (f a) instance (NumHask.Naperian.Naperian f, NumHask.Algebra.Multiplicative.MultiplicativeInvertible a) => NumHask.Algebra.Multiplicative.MultiplicativeInvertible (f a) instance (NumHask.Naperian.Naperian f, NumHask.Algebra.Multiplicative.MultiplicativeMagma a) => NumHask.Algebra.Multiplicative.MultiplicativeHomomorphic a (f a) instance (NumHask.Naperian.Naperian f, NumHask.Algebra.Multiplicative.MultiplicativeMonoidal a) => NumHask.Algebra.Multiplicative.MultiplicativeMonoidal (f a) instance (NumHask.Naperian.Naperian f, NumHask.Algebra.Multiplicative.Multiplicative a) => NumHask.Algebra.Multiplicative.Multiplicative (f a) instance (NumHask.Naperian.Naperian f, NumHask.Algebra.Multiplicative.MultiplicativeGroup a) => NumHask.Algebra.Multiplicative.MultiplicativeGroup (f a) instance (NumHask.Naperian.Naperian f, NumHask.Algebra.Multiplicative.MultiplicativeMagma a, NumHask.Algebra.Additive.Additive a) => NumHask.Algebra.Distribution.Distribution (f a) instance (NumHask.Naperian.Naperian f, NumHask.Algebra.Ring.Semiring a) => NumHask.Algebra.Ring.Semiring (f a) instance (NumHask.Naperian.Naperian f, NumHask.Algebra.Ring.Ring a) => NumHask.Algebra.Ring.Ring (f a) instance (NumHask.Naperian.Naperian f, NumHask.Algebra.Ring.CRing a) => NumHask.Algebra.Ring.CRing (f a) instance (NumHask.Naperian.Naperian f, NumHask.Algebra.Field.Field a) => NumHask.Algebra.Field.Field (f a) instance (NumHask.Naperian.Naperian f, NumHask.Algebra.Field.ExpField a) => NumHask.Algebra.Field.ExpField (f a) instance (NumHask.Naperian.Naperian f, NumHask.Algebra.Field.BoundedField a, Data.Foldable.Foldable f) => NumHask.Algebra.Field.BoundedField (f a) instance (NumHask.Naperian.Naperian f, NumHask.Algebra.Metric.Signed a) => NumHask.Algebra.Metric.Signed (f a) instance (Data.Foldable.Foldable f, NumHask.Naperian.Naperian f, NumHask.Algebra.Field.ExpField a) => NumHask.Algebra.Metric.Normed (f a) a instance (Data.Foldable.Foldable f, NumHask.Naperian.Naperian f, NumHask.Algebra.Metric.Epsilon a) => NumHask.Algebra.Metric.Epsilon (f a) instance (Data.Foldable.Foldable f, NumHask.Naperian.Naperian f, NumHask.Algebra.Field.ExpField a) => NumHask.Algebra.Metric.Metric (f a) a instance (NumHask.Naperian.Naperian f, NumHask.Algebra.Integral.Integral a) => NumHask.Algebra.Integral.Integral (f a) -- | Two different classes are supplied: -- --