{-# LANGUAGE DataKinds #-}
{-# LANGUAGE DerivingVia #-}
{-# LANGUAGE GeneralizedNewtypeDeriving #-}
{-# LANGUAGE LinearTypes #-}
{-# LANGUAGE StandaloneDeriving #-}
{-# LANGUAGE NoImplicitPrelude #-}
{-# OPTIONS_GHC -Wno-orphans #-}
module Data.Num.Linear
(
Num (..),
Additive (..),
AddIdentity (..),
AdditiveGroup (..),
Multiplicative (..),
MultIdentity (..),
Semiring,
Ring,
FromInteger (..),
Adding (..),
getAdded,
Multiplying (..),
getMultiplied,
)
where
import qualified Data.Int
import Data.Monoid.Linear
import Data.Unrestricted.Linear
import qualified Data.Word
import GHC.Num.Natural (Natural)
import qualified Unsafe.Linear as Unsafe
import qualified Prelude
class Additive a where
(+) :: a %1 -> a %1 -> a
infixl 6 +
class (Additive a) => AddIdentity a where
zero :: a
class (AddIdentity a) => AdditiveGroup a where
{-# MINIMAL negate | (-) #-}
negate :: a %1 -> a
negate a
x = a
forall a. AddIdentity a => a
zero a %1 -> a %1 -> a
forall a. AdditiveGroup a => a %1 -> a %1 -> a
- a
x
(-) :: a %1 -> a %1 -> a
infixl 6 -
a
x - a
y = a
x a %1 -> a %1 -> a
forall a. Additive a => a %1 -> a %1 -> a
+ a %1 -> a
forall a. AdditiveGroup a => a %1 -> a
negate a
y
class Multiplicative a where
(*) :: a %1 -> a %1 -> a
infixl 7 *
class (Multiplicative a) => MultIdentity a where
one :: a
class (AddIdentity a, MultIdentity a) => Semiring a
class (AdditiveGroup a, Semiring a) => Ring a
class FromInteger a where
fromInteger :: Prelude.Integer %1 -> a
class (Ring a, FromInteger a) => Num a where
{-# MINIMAL abs, signum #-}
abs :: a %1 -> a
signum :: a %1 -> a
newtype MovableNum a = MovableNum a
deriving (MovableNum a %1 -> ()
(MovableNum a %1 -> ()) -> Consumable (MovableNum a)
forall a. Consumable a => MovableNum a %1 -> ()
forall a. (a %1 -> ()) -> Consumable a
$cconsume :: forall a. Consumable a => MovableNum a %1 -> ()
consume :: MovableNum a %1 -> ()
Consumable, Consumable (MovableNum a)
Consumable (MovableNum a) =>
(MovableNum a %1 -> Replicator (MovableNum a))
-> (MovableNum a %1 -> (MovableNum a, MovableNum a))
-> Dupable (MovableNum a)
MovableNum a %1 -> (MovableNum a, MovableNum a)
MovableNum a %1 -> Replicator (MovableNum a)
forall a.
Consumable a =>
(a %1 -> Replicator a) -> (a %1 -> (a, a)) -> Dupable a
forall a. Dupable a => Consumable (MovableNum a)
forall a.
Dupable a =>
MovableNum a %1 -> (MovableNum a, MovableNum a)
forall a. Dupable a => MovableNum a %1 -> Replicator (MovableNum a)
$cdupR :: forall a. Dupable a => MovableNum a %1 -> Replicator (MovableNum a)
dupR :: MovableNum a %1 -> Replicator (MovableNum a)
$cdup2 :: forall a.
Dupable a =>
MovableNum a %1 -> (MovableNum a, MovableNum a)
dup2 :: MovableNum a %1 -> (MovableNum a, MovableNum a)
Dupable, Dupable (MovableNum a)
Dupable (MovableNum a) =>
(MovableNum a %1 -> Ur (MovableNum a)) -> Movable (MovableNum a)
MovableNum a %1 -> Ur (MovableNum a)
forall a. Dupable a => (a %1 -> Ur a) -> Movable a
forall a. Movable a => Dupable (MovableNum a)
forall a. Movable a => MovableNum a %1 -> Ur (MovableNum a)
$cmove :: forall a. Movable a => MovableNum a %1 -> Ur (MovableNum a)
move :: MovableNum a %1 -> Ur (MovableNum a)
Movable, Integer -> MovableNum a
MovableNum a -> MovableNum a
MovableNum a -> MovableNum a -> MovableNum a
(MovableNum a -> MovableNum a -> MovableNum a)
-> (MovableNum a -> MovableNum a -> MovableNum a)
-> (MovableNum a -> MovableNum a -> MovableNum a)
-> (MovableNum a -> MovableNum a)
-> (MovableNum a -> MovableNum a)
-> (MovableNum a -> MovableNum a)
-> (Integer -> MovableNum a)
-> Num (MovableNum a)
forall a. Num a => Integer -> MovableNum a
forall a. Num a => MovableNum a -> MovableNum a
forall a. Num a => MovableNum a -> MovableNum a -> MovableNum a
forall a.
(a -> a -> a)
-> (a -> a -> a)
-> (a -> a -> a)
-> (a -> a)
-> (a -> a)
-> (a -> a)
-> (Integer -> a)
-> Num a
$c+ :: forall a. Num a => MovableNum a -> MovableNum a -> MovableNum a
+ :: MovableNum a -> MovableNum a -> MovableNum a
$c- :: forall a. Num a => MovableNum a -> MovableNum a -> MovableNum a
- :: MovableNum a -> MovableNum a -> MovableNum a
$c* :: forall a. Num a => MovableNum a -> MovableNum a -> MovableNum a
* :: MovableNum a -> MovableNum a -> MovableNum a
$cnegate :: forall a. Num a => MovableNum a -> MovableNum a
negate :: MovableNum a -> MovableNum a
$cabs :: forall a. Num a => MovableNum a -> MovableNum a
abs :: MovableNum a -> MovableNum a
$csignum :: forall a. Num a => MovableNum a -> MovableNum a
signum :: MovableNum a -> MovableNum a
$cfromInteger :: forall a. Num a => Integer -> MovableNum a
fromInteger :: Integer -> MovableNum a
Prelude.Num)
instance (Movable a, Prelude.Num a) => Additive (MovableNum a) where
+ :: MovableNum a %1 -> MovableNum a %1 -> MovableNum a
(+) = (MovableNum a -> MovableNum a -> MovableNum a)
%1 -> MovableNum a %1 -> MovableNum a %1 -> MovableNum a
forall a b c.
(Movable a, Movable b) =>
(a -> b -> c) %1 -> a %1 -> b %1 -> c
liftU2 MovableNum a -> MovableNum a -> MovableNum a
forall a. Num a => a -> a -> a
(Prelude.+)
instance (Movable a, Prelude.Num a) => AddIdentity (MovableNum a) where
zero :: MovableNum a
zero = a -> MovableNum a
forall a. a -> MovableNum a
MovableNum a
0
instance (Movable a, Prelude.Num a) => AdditiveGroup (MovableNum a) where
(-) = (MovableNum a -> MovableNum a -> MovableNum a)
%1 -> MovableNum a %1 -> MovableNum a %1 -> MovableNum a
forall a b c.
(Movable a, Movable b) =>
(a -> b -> c) %1 -> a %1 -> b %1 -> c
liftU2 MovableNum a -> MovableNum a -> MovableNum a
forall a. Num a => a -> a -> a
(Prelude.-)
instance (Movable a, Prelude.Num a) => Multiplicative (MovableNum a) where
* :: MovableNum a %1 -> MovableNum a %1 -> MovableNum a
(*) = (MovableNum a -> MovableNum a -> MovableNum a)
%1 -> MovableNum a %1 -> MovableNum a %1 -> MovableNum a
forall a b c.
(Movable a, Movable b) =>
(a -> b -> c) %1 -> a %1 -> b %1 -> c
liftU2 MovableNum a -> MovableNum a -> MovableNum a
forall a. Num a => a -> a -> a
(Prelude.*)
instance (Movable a, Prelude.Num a) => MultIdentity (MovableNum a) where
one :: MovableNum a
one = a -> MovableNum a
forall a. a -> MovableNum a
MovableNum a
1
instance (Movable a, Prelude.Num a) => Semiring (MovableNum a)
instance (Movable a, Prelude.Num a) => Ring (MovableNum a)
instance (Movable a, Prelude.Num a) => FromInteger (MovableNum a) where
fromInteger :: Integer %1 -> MovableNum a
fromInteger = (Integer -> MovableNum a) %1 -> Integer %1 -> MovableNum a
forall a b (p :: Multiplicity) (x :: Multiplicity).
(a %p -> b) %1 -> a %x -> b
Unsafe.toLinear Integer -> MovableNum a
forall a. Num a => Integer -> a
Prelude.fromInteger
instance (Movable a, Prelude.Num a) => Num (MovableNum a) where
abs :: MovableNum a %1 -> MovableNum a
abs = (MovableNum a -> MovableNum a)
%1 -> MovableNum a %1 -> MovableNum a
forall a b. Movable a => (a -> b) %1 -> a %1 -> b
liftU MovableNum a -> MovableNum a
forall a. Num a => a -> a
Prelude.abs
signum :: MovableNum a %1 -> MovableNum a
signum = (MovableNum a -> MovableNum a)
%1 -> MovableNum a %1 -> MovableNum a
forall a b. Movable a => (a -> b) %1 -> a %1 -> b
liftU MovableNum a -> MovableNum a
forall a. Num a => a -> a
Prelude.signum
liftU :: (Movable a) => (a -> b) %1 -> (a %1 -> b)
liftU :: forall a b. Movable a => (a -> b) %1 -> a %1 -> b
liftU a -> b
f a
x = (a -> b) %1 -> Ur a %1 -> b
forall a b. (a -> b) %1 -> Ur a %1 -> b
lifted a -> b
f (a %1 -> Ur a
forall a. Movable a => a %1 -> Ur a
move a
x)
where
lifted :: (a -> b) %1 -> (Ur a %1 -> b)
lifted :: forall a b. (a -> b) %1 -> Ur a %1 -> b
lifted a -> b
g (Ur a
a) = a -> b
g a
a
liftU2 :: (Movable a, Movable b) => (a -> b -> c) %1 -> (a %1 -> b %1 -> c)
liftU2 :: forall a b c.
(Movable a, Movable b) =>
(a -> b -> c) %1 -> a %1 -> b %1 -> c
liftU2 a -> b -> c
f a
x b
y = (a -> b -> c) %1 -> Ur a %1 -> Ur b %1 -> c
forall a b c. (a -> b -> c) %1 -> Ur a %1 -> Ur b %1 -> c
lifted a -> b -> c
f (a %1 -> Ur a
forall a. Movable a => a %1 -> Ur a
move a
x) (b %1 -> Ur b
forall a. Movable a => a %1 -> Ur a
move b
y)
where
lifted :: (a -> b -> c) %1 -> (Ur a %1 -> Ur b %1 -> c)
lifted :: forall a b c. (a -> b -> c) %1 -> Ur a %1 -> Ur b %1 -> c
lifted a -> b -> c
g (Ur a
a) (Ur b
b) = a -> b -> c
g a
a b
b
newtype Adding a = Adding a
deriving (Adding a -> Adding a -> Bool
(Adding a -> Adding a -> Bool)
-> (Adding a -> Adding a -> Bool) -> Eq (Adding a)
forall a. Eq a => Adding a -> Adding a -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: forall a. Eq a => Adding a -> Adding a -> Bool
== :: Adding a -> Adding a -> Bool
$c/= :: forall a. Eq a => Adding a -> Adding a -> Bool
/= :: Adding a -> Adding a -> Bool
Prelude.Eq, Eq (Adding a)
Eq (Adding a) =>
(Adding a -> Adding a -> Ordering)
-> (Adding a -> Adding a -> Bool)
-> (Adding a -> Adding a -> Bool)
-> (Adding a -> Adding a -> Bool)
-> (Adding a -> Adding a -> Bool)
-> (Adding a -> Adding a -> Adding a)
-> (Adding a -> Adding a -> Adding a)
-> Ord (Adding a)
Adding a -> Adding a -> Bool
Adding a -> Adding a -> Ordering
Adding a -> Adding a -> Adding a
forall a.
Eq a =>
(a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
forall a. Ord a => Eq (Adding a)
forall a. Ord a => Adding a -> Adding a -> Bool
forall a. Ord a => Adding a -> Adding a -> Ordering
forall a. Ord a => Adding a -> Adding a -> Adding a
$ccompare :: forall a. Ord a => Adding a -> Adding a -> Ordering
compare :: Adding a -> Adding a -> Ordering
$c< :: forall a. Ord a => Adding a -> Adding a -> Bool
< :: Adding a -> Adding a -> Bool
$c<= :: forall a. Ord a => Adding a -> Adding a -> Bool
<= :: Adding a -> Adding a -> Bool
$c> :: forall a. Ord a => Adding a -> Adding a -> Bool
> :: Adding a -> Adding a -> Bool
$c>= :: forall a. Ord a => Adding a -> Adding a -> Bool
>= :: Adding a -> Adding a -> Bool
$cmax :: forall a. Ord a => Adding a -> Adding a -> Adding a
max :: Adding a -> Adding a -> Adding a
$cmin :: forall a. Ord a => Adding a -> Adding a -> Adding a
min :: Adding a -> Adding a -> Adding a
Prelude.Ord, Int -> Adding a -> ShowS
[Adding a] -> ShowS
Adding a -> String
(Int -> Adding a -> ShowS)
-> (Adding a -> String) -> ([Adding a] -> ShowS) -> Show (Adding a)
forall a. Show a => Int -> Adding a -> ShowS
forall a. Show a => [Adding a] -> ShowS
forall a. Show a => Adding a -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: forall a. Show a => Int -> Adding a -> ShowS
showsPrec :: Int -> Adding a -> ShowS
$cshow :: forall a. Show a => Adding a -> String
show :: Adding a -> String
$cshowList :: forall a. Show a => [Adding a] -> ShowS
showList :: [Adding a] -> ShowS
Prelude.Show)
deriving (NonEmpty (Adding a) -> Adding a
Adding a -> Adding a -> Adding a
(Adding a -> Adding a -> Adding a)
-> (NonEmpty (Adding a) -> Adding a)
-> (forall b. Integral b => b -> Adding a -> Adding a)
-> Semigroup (Adding a)
forall b. Integral b => b -> Adding a -> Adding a
forall a. Additive a => NonEmpty (Adding a) -> Adding a
forall a. Additive a => Adding a -> Adding a -> Adding a
forall a b. (Additive a, Integral b) => b -> Adding a -> Adding a
forall a.
(a -> a -> a)
-> (NonEmpty a -> a)
-> (forall b. Integral b => b -> a -> a)
-> Semigroup a
$c<> :: forall a. Additive a => Adding a -> Adding a -> Adding a
<> :: Adding a -> Adding a -> Adding a
$csconcat :: forall a. Additive a => NonEmpty (Adding a) -> Adding a
sconcat :: NonEmpty (Adding a) -> Adding a
$cstimes :: forall a b. (Additive a, Integral b) => b -> Adding a -> Adding a
stimes :: forall b. Integral b => b -> Adding a -> Adding a
Prelude.Semigroup) via NonLinear (Adding a)
deriving (Semigroup (Adding a)
Adding a
Semigroup (Adding a) =>
Adding a
-> (Adding a -> Adding a -> Adding a)
-> ([Adding a] -> Adding a)
-> Monoid (Adding a)
[Adding a] -> Adding a
Adding a -> Adding a -> Adding a
forall a.
Semigroup a =>
a -> (a -> a -> a) -> ([a] -> a) -> Monoid a
forall a. AddIdentity a => Semigroup (Adding a)
forall a. AddIdentity a => Adding a
forall a. AddIdentity a => [Adding a] -> Adding a
forall a. AddIdentity a => Adding a -> Adding a -> Adding a
$cmempty :: forall a. AddIdentity a => Adding a
mempty :: Adding a
$cmappend :: forall a. AddIdentity a => Adding a -> Adding a -> Adding a
mappend :: Adding a -> Adding a -> Adding a
$cmconcat :: forall a. AddIdentity a => [Adding a] -> Adding a
mconcat :: [Adding a] -> Adding a
Prelude.Monoid) via NonLinear (Adding a)
{-# DEPRECATED Adding "Use 'Data.Semigroup.Sum' (reexported as 'Data.Monoid.Linear.Sum') instead" #-}
getAdded :: Adding a %1 -> a
getAdded :: forall a. Adding a %1 -> a
getAdded (Adding a
x) = a
x
{-# DEPRECATED getAdded "Use 'Data.Semigroup.Sum' (reexported as 'Data.Monoid.Linear.Sum') and pattern-match to extract the inner value linearly" #-}
instance (Additive a) => Semigroup (Adding a) where
Adding a
a <> :: Adding a %1 -> Adding a %1 -> Adding a
<> Adding a
b = a -> Adding a
forall a. a -> Adding a
Adding (a
a a %1 -> a %1 -> a
forall a. Additive a => a %1 -> a %1 -> a
+ a
b)
instance (AddIdentity a) => Monoid (Adding a) where
mempty :: Adding a
mempty = a -> Adding a
forall a. a -> Adding a
Adding a
forall a. AddIdentity a => a
zero
newtype Multiplying a = Multiplying a
deriving (Multiplying a -> Multiplying a -> Bool
(Multiplying a -> Multiplying a -> Bool)
-> (Multiplying a -> Multiplying a -> Bool) -> Eq (Multiplying a)
forall a. Eq a => Multiplying a -> Multiplying a -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: forall a. Eq a => Multiplying a -> Multiplying a -> Bool
== :: Multiplying a -> Multiplying a -> Bool
$c/= :: forall a. Eq a => Multiplying a -> Multiplying a -> Bool
/= :: Multiplying a -> Multiplying a -> Bool
Prelude.Eq, Eq (Multiplying a)
Eq (Multiplying a) =>
(Multiplying a -> Multiplying a -> Ordering)
-> (Multiplying a -> Multiplying a -> Bool)
-> (Multiplying a -> Multiplying a -> Bool)
-> (Multiplying a -> Multiplying a -> Bool)
-> (Multiplying a -> Multiplying a -> Bool)
-> (Multiplying a -> Multiplying a -> Multiplying a)
-> (Multiplying a -> Multiplying a -> Multiplying a)
-> Ord (Multiplying a)
Multiplying a -> Multiplying a -> Bool
Multiplying a -> Multiplying a -> Ordering
Multiplying a -> Multiplying a -> Multiplying a
forall a.
Eq a =>
(a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
forall a. Ord a => Eq (Multiplying a)
forall a. Ord a => Multiplying a -> Multiplying a -> Bool
forall a. Ord a => Multiplying a -> Multiplying a -> Ordering
forall a. Ord a => Multiplying a -> Multiplying a -> Multiplying a
$ccompare :: forall a. Ord a => Multiplying a -> Multiplying a -> Ordering
compare :: Multiplying a -> Multiplying a -> Ordering
$c< :: forall a. Ord a => Multiplying a -> Multiplying a -> Bool
< :: Multiplying a -> Multiplying a -> Bool
$c<= :: forall a. Ord a => Multiplying a -> Multiplying a -> Bool
<= :: Multiplying a -> Multiplying a -> Bool
$c> :: forall a. Ord a => Multiplying a -> Multiplying a -> Bool
> :: Multiplying a -> Multiplying a -> Bool
$c>= :: forall a. Ord a => Multiplying a -> Multiplying a -> Bool
>= :: Multiplying a -> Multiplying a -> Bool
$cmax :: forall a. Ord a => Multiplying a -> Multiplying a -> Multiplying a
max :: Multiplying a -> Multiplying a -> Multiplying a
$cmin :: forall a. Ord a => Multiplying a -> Multiplying a -> Multiplying a
min :: Multiplying a -> Multiplying a -> Multiplying a
Prelude.Ord, Int -> Multiplying a -> ShowS
[Multiplying a] -> ShowS
Multiplying a -> String
(Int -> Multiplying a -> ShowS)
-> (Multiplying a -> String)
-> ([Multiplying a] -> ShowS)
-> Show (Multiplying a)
forall a. Show a => Int -> Multiplying a -> ShowS
forall a. Show a => [Multiplying a] -> ShowS
forall a. Show a => Multiplying a -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: forall a. Show a => Int -> Multiplying a -> ShowS
showsPrec :: Int -> Multiplying a -> ShowS
$cshow :: forall a. Show a => Multiplying a -> String
show :: Multiplying a -> String
$cshowList :: forall a. Show a => [Multiplying a] -> ShowS
showList :: [Multiplying a] -> ShowS
Prelude.Show)
deriving (NonEmpty (Multiplying a) -> Multiplying a
Multiplying a -> Multiplying a -> Multiplying a
(Multiplying a -> Multiplying a -> Multiplying a)
-> (NonEmpty (Multiplying a) -> Multiplying a)
-> (forall b. Integral b => b -> Multiplying a -> Multiplying a)
-> Semigroup (Multiplying a)
forall b. Integral b => b -> Multiplying a -> Multiplying a
forall a.
Multiplicative a =>
NonEmpty (Multiplying a) -> Multiplying a
forall a.
Multiplicative a =>
Multiplying a -> Multiplying a -> Multiplying a
forall a b.
(Multiplicative a, Integral b) =>
b -> Multiplying a -> Multiplying a
forall a.
(a -> a -> a)
-> (NonEmpty a -> a)
-> (forall b. Integral b => b -> a -> a)
-> Semigroup a
$c<> :: forall a.
Multiplicative a =>
Multiplying a -> Multiplying a -> Multiplying a
<> :: Multiplying a -> Multiplying a -> Multiplying a
$csconcat :: forall a.
Multiplicative a =>
NonEmpty (Multiplying a) -> Multiplying a
sconcat :: NonEmpty (Multiplying a) -> Multiplying a
$cstimes :: forall a b.
(Multiplicative a, Integral b) =>
b -> Multiplying a -> Multiplying a
stimes :: forall b. Integral b => b -> Multiplying a -> Multiplying a
Prelude.Semigroup) via NonLinear (Multiplying a)
deriving (Semigroup (Multiplying a)
Multiplying a
Semigroup (Multiplying a) =>
Multiplying a
-> (Multiplying a -> Multiplying a -> Multiplying a)
-> ([Multiplying a] -> Multiplying a)
-> Monoid (Multiplying a)
[Multiplying a] -> Multiplying a
Multiplying a -> Multiplying a -> Multiplying a
forall a.
Semigroup a =>
a -> (a -> a -> a) -> ([a] -> a) -> Monoid a
forall a. MultIdentity a => Semigroup (Multiplying a)
forall a. MultIdentity a => Multiplying a
forall a. MultIdentity a => [Multiplying a] -> Multiplying a
forall a.
MultIdentity a =>
Multiplying a -> Multiplying a -> Multiplying a
$cmempty :: forall a. MultIdentity a => Multiplying a
mempty :: Multiplying a
$cmappend :: forall a.
MultIdentity a =>
Multiplying a -> Multiplying a -> Multiplying a
mappend :: Multiplying a -> Multiplying a -> Multiplying a
$cmconcat :: forall a. MultIdentity a => [Multiplying a] -> Multiplying a
mconcat :: [Multiplying a] -> Multiplying a
Prelude.Monoid) via NonLinear (Multiplying a)
{-# DEPRECATED Multiplying "Use 'Data.Semigroup.Product' (reexported as 'Data.Monoid.Linear.Product') instead" #-}
getMultiplied :: Multiplying a %1 -> a
getMultiplied :: forall a. Multiplying a %1 -> a
getMultiplied (Multiplying a
x) = a
x
{-# DEPRECATED getMultiplied "Use 'Data.Semigroup.Product' (reexported as 'Data.Monoid.Linear.Product') and pattern-match to extract the inner value linearly" #-}
instance (Multiplicative a) => Semigroup (Multiplying a) where
Multiplying a
a <> :: Multiplying a %1 -> Multiplying a %1 -> Multiplying a
<> Multiplying a
b = a -> Multiplying a
forall a. a -> Multiplying a
Multiplying (a
a a %1 -> a %1 -> a
forall a. Multiplicative a => a %1 -> a %1 -> a
* a
b)
instance (MultIdentity a) => Monoid (Multiplying a) where
mempty :: Multiplying a
mempty = a -> Multiplying a
forall a. a -> Multiplying a
Multiplying a
forall a. MultIdentity a => a
one
instance (Multiplicative a) => Semigroup (Product a) where
(Product a
x) <> :: Product a %1 -> Product a %1 -> Product a
<> (Product a
y) = a -> Product a
forall a. a -> Product a
Product (a
x a %1 -> a %1 -> a
forall a. Multiplicative a => a %1 -> a %1 -> a
* a
y)
instance (Additive a) => Semigroup (Sum a) where
(Sum a
x) <> :: Sum a %1 -> Sum a %1 -> Sum a
<> (Sum a
y) = a -> Sum a
forall a. a -> Sum a
Sum (a
x a %1 -> a %1 -> a
forall a. Additive a => a %1 -> a %1 -> a
+ a
y)
instance (MultIdentity a) => Monoid (Product a) where
mempty :: Product a
mempty = a -> Product a
forall a. a -> Product a
Product a
forall a. MultIdentity a => a
one
instance (AddIdentity a) => Monoid (Sum a) where
mempty :: Sum a
mempty = a -> Sum a
forall a. a -> Sum a
Sum a
forall a. AddIdentity a => a
zero
deriving via MovableNum Prelude.Int instance Additive Prelude.Int
deriving via MovableNum Prelude.Int instance AddIdentity Prelude.Int
deriving via MovableNum Prelude.Int instance AdditiveGroup Prelude.Int
deriving via MovableNum Prelude.Int instance Multiplicative Prelude.Int
deriving via MovableNum Prelude.Int instance MultIdentity Prelude.Int
deriving via MovableNum Prelude.Int instance Semiring Prelude.Int
deriving via MovableNum Prelude.Int instance Ring Prelude.Int
deriving via MovableNum Prelude.Int instance FromInteger Prelude.Int
deriving via MovableNum Prelude.Int instance Num Prelude.Int
deriving via MovableNum Prelude.Word instance Additive Prelude.Word
deriving via MovableNum Prelude.Word instance AddIdentity Prelude.Word
deriving via MovableNum Prelude.Word instance AdditiveGroup Prelude.Word
deriving via MovableNum Prelude.Word instance Multiplicative Prelude.Word
deriving via MovableNum Prelude.Word instance MultIdentity Prelude.Word
deriving via MovableNum Prelude.Word instance Semiring Prelude.Word
deriving via MovableNum Prelude.Word instance Ring Prelude.Word
deriving via MovableNum Prelude.Word instance FromInteger Prelude.Word
deriving via MovableNum Prelude.Word instance Num Prelude.Word
deriving via MovableNum Prelude.Double instance Additive Prelude.Double
deriving via MovableNum Prelude.Double instance AddIdentity Prelude.Double
deriving via MovableNum Prelude.Double instance AdditiveGroup Prelude.Double
deriving via MovableNum Prelude.Double instance Multiplicative Prelude.Double
deriving via MovableNum Prelude.Double instance MultIdentity Prelude.Double
deriving via MovableNum Prelude.Double instance Semiring Prelude.Double
deriving via MovableNum Prelude.Double instance Ring Prelude.Double
deriving via MovableNum Prelude.Double instance FromInteger Prelude.Double
deriving via MovableNum Prelude.Double instance Num Prelude.Double
deriving via MovableNum Prelude.Float instance Additive Prelude.Float
deriving via MovableNum Prelude.Float instance AddIdentity Prelude.Float
deriving via MovableNum Prelude.Float instance AdditiveGroup Prelude.Float
deriving via MovableNum Prelude.Float instance Multiplicative Prelude.Float
deriving via MovableNum Prelude.Float instance MultIdentity Prelude.Float
deriving via MovableNum Prelude.Float instance Semiring Prelude.Float
deriving via MovableNum Prelude.Float instance Ring Prelude.Float
deriving via MovableNum Prelude.Float instance FromInteger Prelude.Float
deriving via MovableNum Prelude.Float instance Num Prelude.Float
deriving via MovableNum Prelude.Integer instance Additive Prelude.Integer
deriving via MovableNum Prelude.Integer instance AddIdentity Prelude.Integer
deriving via MovableNum Prelude.Integer instance AdditiveGroup Prelude.Integer
deriving via MovableNum Prelude.Integer instance Multiplicative Prelude.Integer
deriving via MovableNum Prelude.Integer instance MultIdentity Prelude.Integer
deriving via MovableNum Prelude.Integer instance Semiring Prelude.Integer
deriving via MovableNum Prelude.Integer instance Ring Prelude.Integer
deriving via MovableNum Prelude.Integer instance FromInteger Prelude.Integer
deriving via MovableNum Prelude.Integer instance Num Prelude.Integer
deriving via MovableNum Natural instance Additive Natural
deriving via MovableNum Natural instance AddIdentity Natural
deriving via MovableNum Natural instance AdditiveGroup Natural
deriving via MovableNum Natural instance Multiplicative Natural
deriving via MovableNum Natural instance MultIdentity Natural
deriving via MovableNum Natural instance Semiring Natural
deriving via MovableNum Natural instance FromInteger Natural
deriving via MovableNum Data.Int.Int8 instance Additive Data.Int.Int8
deriving via MovableNum Data.Int.Int8 instance AddIdentity Data.Int.Int8
deriving via MovableNum Data.Int.Int8 instance AdditiveGroup Data.Int.Int8
deriving via MovableNum Data.Int.Int8 instance Multiplicative Data.Int.Int8
deriving via MovableNum Data.Int.Int8 instance MultIdentity Data.Int.Int8
deriving via MovableNum Data.Int.Int8 instance Semiring Data.Int.Int8
deriving via MovableNum Data.Int.Int8 instance Ring Data.Int.Int8
deriving via MovableNum Data.Int.Int8 instance FromInteger Data.Int.Int8
deriving via MovableNum Data.Int.Int8 instance Num Data.Int.Int8
deriving via MovableNum Data.Int.Int16 instance Additive Data.Int.Int16
deriving via MovableNum Data.Int.Int16 instance AddIdentity Data.Int.Int16
deriving via MovableNum Data.Int.Int16 instance AdditiveGroup Data.Int.Int16
deriving via MovableNum Data.Int.Int16 instance Multiplicative Data.Int.Int16
deriving via MovableNum Data.Int.Int16 instance MultIdentity Data.Int.Int16
deriving via MovableNum Data.Int.Int16 instance Semiring Data.Int.Int16
deriving via MovableNum Data.Int.Int16 instance Ring Data.Int.Int16
deriving via MovableNum Data.Int.Int16 instance FromInteger Data.Int.Int16
deriving via MovableNum Data.Int.Int16 instance Num Data.Int.Int16
deriving via MovableNum Data.Int.Int32 instance Additive Data.Int.Int32
deriving via MovableNum Data.Int.Int32 instance AddIdentity Data.Int.Int32
deriving via MovableNum Data.Int.Int32 instance AdditiveGroup Data.Int.Int32
deriving via MovableNum Data.Int.Int32 instance Multiplicative Data.Int.Int32
deriving via MovableNum Data.Int.Int32 instance MultIdentity Data.Int.Int32
deriving via MovableNum Data.Int.Int32 instance Semiring Data.Int.Int32
deriving via MovableNum Data.Int.Int32 instance Ring Data.Int.Int32
deriving via MovableNum Data.Int.Int32 instance FromInteger Data.Int.Int32
deriving via MovableNum Data.Int.Int32 instance Num Data.Int.Int32
deriving via MovableNum Data.Int.Int64 instance Additive Data.Int.Int64
deriving via MovableNum Data.Int.Int64 instance AddIdentity Data.Int.Int64
deriving via MovableNum Data.Int.Int64 instance AdditiveGroup Data.Int.Int64
deriving via MovableNum Data.Int.Int64 instance Multiplicative Data.Int.Int64
deriving via MovableNum Data.Int.Int64 instance MultIdentity Data.Int.Int64
deriving via MovableNum Data.Int.Int64 instance Semiring Data.Int.Int64
deriving via MovableNum Data.Int.Int64 instance Ring Data.Int.Int64
deriving via MovableNum Data.Int.Int64 instance FromInteger Data.Int.Int64
deriving via MovableNum Data.Int.Int64 instance Num Data.Int.Int64
deriving via MovableNum Data.Word.Word8 instance Additive Data.Word.Word8
deriving via MovableNum Data.Word.Word8 instance AddIdentity Data.Word.Word8
deriving via MovableNum Data.Word.Word8 instance AdditiveGroup Data.Word.Word8
deriving via MovableNum Data.Word.Word8 instance Multiplicative Data.Word.Word8
deriving via MovableNum Data.Word.Word8 instance MultIdentity Data.Word.Word8
deriving via MovableNum Data.Word.Word8 instance Semiring Data.Word.Word8
deriving via MovableNum Data.Word.Word8 instance Ring Data.Word.Word8
deriving via MovableNum Data.Word.Word8 instance FromInteger Data.Word.Word8
deriving via MovableNum Data.Word.Word8 instance Num Data.Word.Word8
deriving via MovableNum Data.Word.Word16 instance Additive Data.Word.Word16
deriving via MovableNum Data.Word.Word16 instance AddIdentity Data.Word.Word16
deriving via MovableNum Data.Word.Word16 instance AdditiveGroup Data.Word.Word16
deriving via MovableNum Data.Word.Word16 instance Multiplicative Data.Word.Word16
deriving via MovableNum Data.Word.Word16 instance MultIdentity Data.Word.Word16
deriving via MovableNum Data.Word.Word16 instance Semiring Data.Word.Word16
deriving via MovableNum Data.Word.Word16 instance Ring Data.Word.Word16
deriving via MovableNum Data.Word.Word16 instance FromInteger Data.Word.Word16
deriving via MovableNum Data.Word.Word16 instance Num Data.Word.Word16
deriving via MovableNum Data.Word.Word32 instance Additive Data.Word.Word32
deriving via MovableNum Data.Word.Word32 instance AddIdentity Data.Word.Word32
deriving via MovableNum Data.Word.Word32 instance AdditiveGroup Data.Word.Word32
deriving via MovableNum Data.Word.Word32 instance Multiplicative Data.Word.Word32
deriving via MovableNum Data.Word.Word32 instance MultIdentity Data.Word.Word32
deriving via MovableNum Data.Word.Word32 instance Semiring Data.Word.Word32
deriving via MovableNum Data.Word.Word32 instance Ring Data.Word.Word32
deriving via MovableNum Data.Word.Word32 instance FromInteger Data.Word.Word32
deriving via MovableNum Data.Word.Word32 instance Num Data.Word.Word32
deriving via MovableNum Data.Word.Word64 instance Additive Data.Word.Word64
deriving via MovableNum Data.Word.Word64 instance AddIdentity Data.Word.Word64
deriving via MovableNum Data.Word.Word64 instance AdditiveGroup Data.Word.Word64
deriving via MovableNum Data.Word.Word64 instance Multiplicative Data.Word.Word64
deriving via MovableNum Data.Word.Word64 instance MultIdentity Data.Word.Word64
deriving via MovableNum Data.Word.Word64 instance Semiring Data.Word.Word64
deriving via MovableNum Data.Word.Word64 instance Ring Data.Word.Word64
deriving via MovableNum Data.Word.Word64 instance FromInteger Data.Word.Word64
deriving via MovableNum Data.Word.Word64 instance Num Data.Word.Word64