rings-0.1.2: Ring-like objects.

Safe HaskellSafe
LanguageHaskell2010

Data.Semimodule.Dual

Contents

Synopsis

Linear functionals

newtype Dual a c Source #

Linear functionals from elements of a free semimodule to a scalar.

f !* (x + y) = (f !* x) + (f !* y)
f !* (x .* a) = a * (f !* x)

Caution: You must ensure these laws hold when using the default constructor.

Constructors

Dual 

Fields

Instances
RightSemimodule r s => RightSemimodule r (Dual s m) Source # 
Instance details

Defined in Data.Semimodule.Dual

Methods

rscale :: r -> Dual s m -> Dual s m Source #

LeftSemimodule r s => LeftSemimodule r (Dual s m) Source # 
Instance details

Defined in Data.Semimodule.Dual

Methods

lscale :: r -> Dual s m -> Dual s m Source #

Monad (Dual a) Source # 
Instance details

Defined in Data.Semimodule.Dual

Methods

(>>=) :: Dual a a0 -> (a0 -> Dual a b) -> Dual a b #

(>>) :: Dual a a0 -> Dual a b -> Dual a b #

return :: a0 -> Dual a a0 #

fail :: String -> Dual a a0 #

Functor (Dual a) Source # 
Instance details

Defined in Data.Semimodule.Dual

Methods

fmap :: (a0 -> b) -> Dual a a0 -> Dual a b #

(<$) :: a0 -> Dual a b -> Dual a a0 #

Applicative (Dual a) Source # 
Instance details

Defined in Data.Semimodule.Dual

Methods

pure :: a0 -> Dual a a0 #

(<*>) :: Dual a (a0 -> b) -> Dual a a0 -> Dual a b #

liftA2 :: (a0 -> b -> c) -> Dual a a0 -> Dual a b -> Dual a c #

(*>) :: Dual a a0 -> Dual a b -> Dual a b #

(<*) :: Dual a a0 -> Dual a b -> Dual a a0 #

Coalgebra a b => Semigroup (Multiplicative (Dual a b)) Source # 
Instance details

Defined in Data.Semimodule.Dual

(Additive - Semigroup) a => Semigroup (Additive (Dual a b)) Source # 
Instance details

Defined in Data.Semimodule.Dual

Methods

(<>) :: Additive (Dual a b) -> Additive (Dual a b) -> Additive (Dual a b) #

sconcat :: NonEmpty (Additive (Dual a b)) -> Additive (Dual a b) #

stimes :: Integral b0 => b0 -> Additive (Dual a b) -> Additive (Dual a b) #

Counital a b => Monoid (Multiplicative (Dual a b)) Source # 
Instance details

Defined in Data.Semimodule.Dual

(Additive - Monoid) a => Monoid (Additive (Dual a b)) Source # 
Instance details

Defined in Data.Semimodule.Dual

Methods

mempty :: Additive (Dual a b) #

mappend :: Additive (Dual a b) -> Additive (Dual a b) -> Additive (Dual a b) #

mconcat :: [Additive (Dual a b)] -> Additive (Dual a b) #

(Additive - Monoid) a => Alternative (Dual a) Source # 
Instance details

Defined in Data.Semimodule.Dual

Methods

empty :: Dual a a0 #

(<|>) :: Dual a a0 -> Dual a a0 -> Dual a a0 #

some :: Dual a a0 -> Dual a [a0] #

many :: Dual a a0 -> Dual a [a0] #

(Additive - Monoid) a => MonadPlus (Dual a) Source # 
Instance details

Defined in Data.Semimodule.Dual

Methods

mzero :: Dual a a0 #

mplus :: Dual a a0 -> Dual a a0 -> Dual a a0 #

(Additive - Group) a => Group (Additive (Dual a b)) Source # 
Instance details

Defined in Data.Semimodule.Dual

Methods

inv :: Additive (Dual a b) -> Additive (Dual a b) #

greplicate :: Integer -> Additive (Dual a b) -> Additive (Dual a b) #

(Additive - Group) a => Loop (Additive (Dual a b)) Source # 
Instance details

Defined in Data.Semimodule.Dual

Methods

lempty :: Additive (Dual a b) #

lreplicate :: Natural -> Additive (Dual a b) -> Additive (Dual a b) #

(Additive - Group) a => Quasigroup (Additive (Dual a b)) Source # 
Instance details

Defined in Data.Semimodule.Dual

Methods

(//) :: Additive (Dual a b) -> Additive (Dual a b) -> Additive (Dual a b) #

(\\) :: Additive (Dual a b) -> Additive (Dual a b) -> Additive (Dual a b) #

(Additive - Group) a => Magma (Additive (Dual a b)) Source # 
Instance details

Defined in Data.Semimodule.Dual

Methods

(<<) :: Additive (Dual a b) -> Additive (Dual a b) -> Additive (Dual a b) #

(Ring a, Counital a b) => Ring (Dual a b) Source # 
Instance details

Defined in Data.Semimodule.Dual

Counital a b => Semiring (Dual a b) Source # 
Instance details

Defined in Data.Semimodule.Dual

Coalgebra a b => Presemiring (Dual a b) Source # 
Instance details

Defined in Data.Semimodule.Dual

Counital r m => RightSemimodule (Dual r m) (Dual r m) Source # 
Instance details

Defined in Data.Semimodule.Dual

Methods

rscale :: Dual r m -> Dual r m -> Dual r m Source #

Counital r m => LeftSemimodule (Dual r m) (Dual r m) Source # 
Instance details

Defined in Data.Semimodule.Dual

Methods

lscale :: Dual r m -> Dual r m -> Dual r m Source #

image' :: Semiring a => Foldable f => f (a, c) -> Dual a c Source #

Create a Dual from a linear combination of basis vectors.

>>> image' [(2, E31),(3, E32)] !* V3 1 1 1 :: Int
5

(!*) :: Free f => Dual a (Rep f) -> f a -> a infixr 3 Source #

Apply a linear functional to a vector.

(*!) :: Free f => f a -> Dual a (Rep f) -> a infixl 3 Source #

Apply a linear functional to a vector.

toTran :: (b -> Dual a c) -> Tran a b c Source #

Obtain a linear transfrom from a linear functional.

fromTran :: Tran a b c -> b -> Dual a c Source #

Obtain a linear functional from a linear transform.

Common linear functionals

init :: Unital a b => b -> Dual a () Source #

TODO: Document

coinit :: Counital a c => Dual a c Source #

TODO: Document

joined' :: Algebra a b => b -> Dual a (b, b) Source #

TODO: Document

cojoined' :: Coalgebra a c => c -> c -> Dual a c Source #

convolve' :: Algebra a b => Coalgebra a c => (b -> Dual a c) -> (b -> Dual a c) -> b -> Dual a c Source #

TODO: Document