rings-0.0.3: Ring-like objects.

Safe HaskellSafe
LanguageHaskell2010

Data.Algebra.Quaternion

Synopsis

Documentation

data Quat a Source #

Constructors

Quat !a !(V3 a) 
Instances
Functor Quat Source # 
Instance details

Defined in Data.Algebra.Quaternion

Methods

fmap :: (a -> b) -> Quat a -> Quat b #

(<$) :: a -> Quat b -> Quat a #

Foldable Quat Source # 
Instance details

Defined in Data.Algebra.Quaternion

Methods

fold :: Monoid m => Quat m -> m #

foldMap :: Monoid m => (a -> m) -> Quat a -> m #

foldr :: (a -> b -> b) -> b -> Quat a -> b #

foldr' :: (a -> b -> b) -> b -> Quat a -> b #

foldl :: (b -> a -> b) -> b -> Quat a -> b #

foldl' :: (b -> a -> b) -> b -> Quat a -> b #

foldr1 :: (a -> a -> a) -> Quat a -> a #

foldl1 :: (a -> a -> a) -> Quat a -> a #

toList :: Quat a -> [a] #

null :: Quat a -> Bool #

length :: Quat a -> Int #

elem :: Eq a => a -> Quat a -> Bool #

maximum :: Ord a => Quat a -> a #

minimum :: Ord a => Quat a -> a #

sum :: Num a => Quat a -> a #

product :: Num a => Quat a -> a #

Distributive Quat Source # 
Instance details

Defined in Data.Algebra.Quaternion

Methods

distribute :: Functor f => f (Quat a) -> Quat (f a) #

collect :: Functor f => (a -> Quat b) -> f a -> Quat (f b) #

distributeM :: Monad m => m (Quat a) -> Quat (m a) #

collectM :: Monad m => (a -> Quat b) -> m a -> Quat (m b) #

Representable Quat Source # 
Instance details

Defined in Data.Algebra.Quaternion

Associated Types

type Rep Quat :: Type #

Methods

tabulate :: (Rep Quat -> a) -> Quat a #

index :: Quat a -> Rep Quat -> a #

Show1 Quat Source # 
Instance details

Defined in Data.Algebra.Quaternion

Methods

liftShowsPrec :: (Int -> a -> ShowS) -> ([a] -> ShowS) -> Int -> Quat a -> ShowS #

liftShowList :: (Int -> a -> ShowS) -> ([a] -> ShowS) -> [Quat a] -> ShowS #

Foldable1 Quat Source # 
Instance details

Defined in Data.Algebra.Quaternion

Methods

fold1 :: Semigroup m => Quat m -> m #

foldMap1 :: Semigroup m => (a -> m) -> Quat a -> m #

toNonEmpty :: Quat a -> NonEmpty a #

Semiring a => Bisemimodule a a (Quat a) Source # 
Instance details

Defined in Data.Algebra.Quaternion

Methods

discale :: a -> a -> Quat a -> Quat a Source #

Semiring a => RightSemimodule a (Quat a) Source # 
Instance details

Defined in Data.Algebra.Quaternion

Methods

rscale :: a -> Quat a -> Quat a Source #

Semiring a => LeftSemimodule a (Quat a) Source # 
Instance details

Defined in Data.Algebra.Quaternion

Methods

lscale :: a -> Quat a -> Quat a Source #

Eq a => Eq (Quat a) Source # 
Instance details

Defined in Data.Algebra.Quaternion

Methods

(==) :: Quat a -> Quat a -> Bool #

(/=) :: Quat a -> Quat a -> Bool #

Ord a => Ord (Quat a) Source # 
Instance details

Defined in Data.Algebra.Quaternion

Methods

compare :: Quat a -> Quat a -> Ordering #

(<) :: Quat a -> Quat a -> Bool #

(<=) :: Quat a -> Quat a -> Bool #

(>) :: Quat a -> Quat a -> Bool #

(>=) :: Quat a -> Quat a -> Bool #

max :: Quat a -> Quat a -> Quat a #

min :: Quat a -> Quat a -> Quat a #

Show a => Show (Quat a) Source # 
Instance details

Defined in Data.Algebra.Quaternion

Methods

showsPrec :: Int -> Quat a -> ShowS #

show :: Quat a -> String #

showList :: [Quat a] -> ShowS #

Generic (Quat a) Source # 
Instance details

Defined in Data.Algebra.Quaternion

Associated Types

type Rep (Quat a) :: Type -> Type #

Methods

from :: Quat a -> Rep (Quat a) x #

to :: Rep (Quat a) x -> Quat a #

Real a => Semigroup (Multiplicative (Quat a)) Source # 
Instance details

Defined in Data.Algebra.Quaternion

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

Defined in Data.Algebra.Quaternion

Methods

(<>) :: Additive (Quat a) -> Additive (Quat a) -> Additive (Quat a) #

sconcat :: NonEmpty (Additive (Quat a)) -> Additive (Quat a) #

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

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

Defined in Data.Algebra.Quaternion

Methods

(<>) :: Quat a -> Quat a -> Quat a #

sconcat :: NonEmpty (Quat a) -> Quat a #

stimes :: Integral b => b -> Quat a -> Quat a #

Real a => Monoid (Multiplicative (Quat a)) Source # 
Instance details

Defined in Data.Algebra.Quaternion

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

Defined in Data.Algebra.Quaternion

Methods

mempty :: Additive (Quat a) #

mappend :: Additive (Quat a) -> Additive (Quat a) -> Additive (Quat a) #

mconcat :: [Additive (Quat a)] -> Additive (Quat a) #

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

Defined in Data.Algebra.Quaternion

Methods

mempty :: Quat a #

mappend :: Quat a -> Quat a -> Quat a #

mconcat :: [Quat a] -> Quat a #

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

Defined in Data.Algebra.Quaternion

Methods

inv :: Additive (Quat a) -> Additive (Quat a) #

greplicate :: Integer -> Additive (Quat a) -> Additive (Quat a) #

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

Defined in Data.Algebra.Quaternion

Methods

inv :: Quat a -> Quat a #

greplicate :: Integer -> Quat a -> Quat a #

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

Defined in Data.Algebra.Quaternion

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

Defined in Data.Algebra.Quaternion

Methods

lempty :: Quat a #

lreplicate :: Natural -> Quat a -> Quat a #

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

Defined in Data.Algebra.Quaternion

Methods

(//) :: Additive (Quat a) -> Additive (Quat a) -> Additive (Quat a) #

(\\) :: Additive (Quat a) -> Additive (Quat a) -> Additive (Quat a) #

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

Defined in Data.Algebra.Quaternion

Methods

(//) :: Quat a -> Quat a -> Quat a #

(\\) :: Quat a -> Quat a -> Quat a #

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

Defined in Data.Algebra.Quaternion

Methods

(<<) :: Additive (Quat a) -> Additive (Quat a) -> Additive (Quat a) #

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

Defined in Data.Algebra.Quaternion

Methods

(<<) :: Quat a -> Quat a -> Quat a #

Real a => Ring (Quat a) Source # 
Instance details

Defined in Data.Algebra.Quaternion

Real a => Semiring (Quat a) Source # 
Instance details

Defined in Data.Algebra.Quaternion

Real a => Presemiring (Quat a) Source # 
Instance details

Defined in Data.Algebra.Quaternion

Generic1 Quat Source # 
Instance details

Defined in Data.Algebra.Quaternion

Associated Types

type Rep1 Quat :: k -> Type #

Methods

from1 :: Quat a -> Rep1 Quat a #

to1 :: Rep1 Quat a -> Quat a #

type Rep Quat Source # 
Instance details

Defined in Data.Algebra.Quaternion

type Rep Quat = Maybe E3
type Rep (Quat a) Source # 
Instance details

Defined in Data.Algebra.Quaternion

type Rep (Quat a) = D1 (MetaData "Quat" "Data.Algebra.Quaternion" "rings-0.0.3-21Z3wlGnIMkBc1cJ09ZojY" False) (C1 (MetaCons "Quat" PrefixI False) (S1 (MetaSel (Nothing :: Maybe Symbol) NoSourceUnpackedness SourceStrict DecidedStrict) (Rec0 a) :*: S1 (MetaSel (Nothing :: Maybe Symbol) SourceUnpack SourceStrict DecidedStrict) (Rec0 (V3 a))))
type Rep1 Quat Source # 
Instance details

Defined in Data.Algebra.Quaternion

type Rep1 Quat = D1 (MetaData "Quat" "Data.Algebra.Quaternion" "rings-0.0.3-21Z3wlGnIMkBc1cJ09ZojY" False) (C1 (MetaCons "Quat" PrefixI False) (S1 (MetaSel (Nothing :: Maybe Symbol) NoSourceUnpackedness SourceStrict DecidedStrict) Par1 :*: S1 (MetaSel (Nothing :: Maybe Symbol) SourceUnpack SourceStrict DecidedStrict) (Rec1 V3)))

quat :: a -> a -> a -> a -> Quat a Source #

Obtain a Quat from 4 base elements.

scal :: Quat a -> a Source #

Real or scalar part of a quaternion.

vect :: Quat a -> V3 a Source #

qu :: Semiring a => Quat a Source #

The real quaternion.

Represents no rotation.

qu = unit

qi :: Semiring a => Quat a Source #

The i quaternion.

Represents a \( \pi \) radian rotation about the x axis.

>>> rotate (qi :: QuatM) $ V3 1 0 0
V3 1.000000 0.000000 0.000000
>>> rotate (qi :: QuatM) $ V3 0 1 0
V3 0.000000 -1.000000 0.000000
>>> rotate (qi :: QuatM) $ V3 0 0 1
V3 0.000000 0.000000 -1.000000
>>> qi * qj
Quat 0 (V3 0 0 1)

qj :: Semiring a => Quat a Source #

The j quaternion.

Represents a \( \pi \) radian rotation about the y axis.

>>> rotate (qj :: QuatM) $ V3 1 0 0
V3 -1.000000 0.000000 0.000000
>>> rotate (qj :: QuatM) $ V3 0 1 0
V3 0.000000 1.000000 0.000000
>>> rotate (qj :: QuatM) $ V3 0 0 1
V3 0.000000 0.000000 -1.000000
>>> qj * qk
Quat 0 (V3 1 0 0)

qk :: Semiring a => Quat a Source #

The k quaternion.

Represents a \( \pi \) radian rotation about the z axis.

>>> rotate (qk :: QuatM) $ V3 1 0 0
V3 -1.000000 0.000000 0.000000
>>> rotate (qk :: QuatM) $ V3 0 1 0
V3 0.000000 -1.000000 0.000000
>>> rotate (qk :: QuatM) $ V3 0 0 1
V3 0.000000 0.000000 1.000000
>>> qk * qi
Quat 0 (V3 0 1 0)
>>> qi * qj * qk
Quat (-1) (V3 0 0 0)