{-# 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 Data.Monoid.Linear
import Data.Unrestricted.Linear
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
consume :: MovableNum a %1 -> ()
$cconsume :: forall a. Consumable a => 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)
dup2 :: MovableNum a %1 -> (MovableNum a, MovableNum a)
$cdup2 :: forall a.
Dupable a =>
MovableNum a %1 -> (MovableNum a, MovableNum a)
dupR :: MovableNum a %1 -> Replicator (MovableNum a)
$cdupR :: forall a. Dupable a => MovableNum a %1 -> Replicator (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)
move :: MovableNum a %1 -> Ur (MovableNum a)
$cmove :: forall a. Movable a => 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
fromInteger :: Integer -> MovableNum a
$cfromInteger :: forall a. Num a => Integer -> MovableNum a
signum :: MovableNum a -> MovableNum a
$csignum :: forall a. Num a => MovableNum a -> MovableNum a
abs :: MovableNum a -> MovableNum a
$cabs :: forall a. Num a => MovableNum a -> MovableNum a
negate :: MovableNum a -> MovableNum a
$cnegate :: forall a. Num 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
$c+ :: forall a. Num a => MovableNum a -> MovableNum a -> 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
/= :: Adding a -> Adding a -> Bool
$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
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
min :: Adding a -> Adding a -> Adding a
$cmin :: forall a. Ord a => Adding a -> Adding a -> Adding a
max :: Adding a -> Adding a -> Adding a
$cmax :: forall a. Ord a => Adding a -> Adding a -> Adding a
>= :: 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
$c< :: forall a. Ord a => Adding a -> Adding a -> Bool
compare :: Adding a -> Adding a -> Ordering
$ccompare :: forall a. Ord a => Adding a -> Adding a -> Ordering
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
showList :: [Adding a] -> ShowS
$cshowList :: forall a. Show a => [Adding a] -> ShowS
show :: Adding a -> String
$cshow :: forall a. Show a => Adding a -> String
showsPrec :: Int -> Adding a -> ShowS
$cshowsPrec :: forall a. Show a => Int -> 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
stimes :: forall b. Integral b => b -> Adding a -> Adding a
$cstimes :: forall a b. (Additive a, Integral b) => b -> Adding a -> Adding a
sconcat :: NonEmpty (Adding a) -> Adding a
$csconcat :: forall a. Additive a => NonEmpty (Adding a) -> Adding a
<> :: Adding a -> Adding a -> Adding a
$c<> :: forall a. Additive a => Adding a -> 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
mconcat :: [Adding a] -> Adding a
$cmconcat :: forall a. AddIdentity a => [Adding a] -> Adding a
mappend :: Adding a -> Adding a -> Adding a
$cmappend :: forall a. AddIdentity a => Adding a -> Adding a -> Adding a
mempty :: Adding a
$cmempty :: forall a. AddIdentity 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 %1 -> 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
/= :: Multiplying a -> Multiplying a -> Bool
$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
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
min :: Multiplying a -> Multiplying a -> Multiplying a
$cmin :: forall a. Ord a => Multiplying a -> Multiplying a -> Multiplying a
max :: Multiplying a -> Multiplying a -> Multiplying a
$cmax :: forall a. Ord a => Multiplying a -> Multiplying a -> Multiplying a
>= :: 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
$c< :: forall a. Ord a => Multiplying a -> Multiplying a -> Bool
compare :: Multiplying a -> Multiplying a -> Ordering
$ccompare :: forall a. Ord a => Multiplying a -> Multiplying a -> Ordering
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
showList :: [Multiplying a] -> ShowS
$cshowList :: forall a. Show a => [Multiplying a] -> ShowS
show :: Multiplying a -> String
$cshow :: forall a. Show a => Multiplying a -> String
showsPrec :: Int -> Multiplying a -> ShowS
$cshowsPrec :: forall a. Show a => Int -> 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
stimes :: forall b. Integral b => b -> Multiplying a -> Multiplying a
$cstimes :: forall a b.
(Multiplicative a, Integral b) =>
b -> Multiplying a -> Multiplying a
sconcat :: NonEmpty (Multiplying a) -> Multiplying a
$csconcat :: forall a.
Multiplicative a =>
NonEmpty (Multiplying a) -> Multiplying a
<> :: Multiplying a -> Multiplying a -> Multiplying a
$c<> :: forall a.
Multiplicative a =>
Multiplying a -> 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
mconcat :: [Multiplying a] -> Multiplying a
$cmconcat :: forall a. MultIdentity a => [Multiplying a] -> Multiplying a
mappend :: Multiplying a -> Multiplying a -> Multiplying a
$cmappend :: forall a.
MultIdentity a =>
Multiplying a -> Multiplying a -> Multiplying a
mempty :: Multiplying a
$cmempty :: forall a. MultIdentity 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 %1 -> 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 %1 -> 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 %1 -> 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.Double instance Additive Prelude.Double
deriving via MovableNum Prelude.Int instance AddIdentity Prelude.Int
deriving via MovableNum Prelude.Double instance AddIdentity Prelude.Double
deriving via MovableNum Prelude.Int instance AdditiveGroup Prelude.Int
deriving via MovableNum Prelude.Double instance AdditiveGroup Prelude.Double
deriving via MovableNum Prelude.Int instance Multiplicative Prelude.Int
deriving via MovableNum Prelude.Double instance Multiplicative Prelude.Double
deriving via MovableNum Prelude.Int instance MultIdentity Prelude.Int
deriving via MovableNum Prelude.Double instance MultIdentity Prelude.Double
deriving via MovableNum Prelude.Int instance Semiring Prelude.Int
deriving via MovableNum Prelude.Double instance Semiring Prelude.Double
deriving via MovableNum Prelude.Int instance Ring Prelude.Int
deriving via MovableNum Prelude.Double instance Ring Prelude.Double
deriving via MovableNum Prelude.Int instance FromInteger Prelude.Int
deriving via MovableNum Prelude.Double instance FromInteger Prelude.Double
deriving via MovableNum Prelude.Int instance Num Prelude.Int
deriving via MovableNum Prelude.Double instance Num Prelude.Double