{-# LANGUAGE TypeFamilies #-}
module Math.Manifold.VectorSpace.ZeroDimensional (
ZeroDim (..)
) where
import Data.AffineSpace
import Data.VectorSpace
import Data.Basis
import Data.Void
import Data.Semigroup
data ZeroDim s = Origin deriving (ZeroDim s -> ZeroDim s -> Bool
(ZeroDim s -> ZeroDim s -> Bool)
-> (ZeroDim s -> ZeroDim s -> Bool) -> Eq (ZeroDim s)
forall s. ZeroDim s -> ZeroDim s -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: ZeroDim s -> ZeroDim s -> Bool
$c/= :: forall s. ZeroDim s -> ZeroDim s -> Bool
== :: ZeroDim s -> ZeroDim s -> Bool
$c== :: forall s. ZeroDim s -> ZeroDim s -> Bool
Eq, Int -> ZeroDim s -> ShowS
[ZeroDim s] -> ShowS
ZeroDim s -> String
(Int -> ZeroDim s -> ShowS)
-> (ZeroDim s -> String)
-> ([ZeroDim s] -> ShowS)
-> Show (ZeroDim s)
forall s. Int -> ZeroDim s -> ShowS
forall s. [ZeroDim s] -> ShowS
forall s. ZeroDim s -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [ZeroDim s] -> ShowS
$cshowList :: forall s. [ZeroDim s] -> ShowS
show :: ZeroDim s -> String
$cshow :: forall s. ZeroDim s -> String
showsPrec :: Int -> ZeroDim s -> ShowS
$cshowsPrec :: forall s. Int -> ZeroDim s -> ShowS
Show)
instance Semigroup (ZeroDim s) where
ZeroDim s
Origin<> :: ZeroDim s -> ZeroDim s -> ZeroDim s
<>ZeroDim s
Origin = ZeroDim s
forall s. ZeroDim s
Origin
instance Monoid (ZeroDim s) where
mempty :: ZeroDim s
mempty = ZeroDim s
forall s. ZeroDim s
Origin
mappend :: ZeroDim s -> ZeroDim s -> ZeroDim s
mappend = ZeroDim s -> ZeroDim s -> ZeroDim s
forall a. Semigroup a => a -> a -> a
(<>)
instance AffineSpace (ZeroDim s) where
type Diff (ZeroDim s) = ZeroDim s
ZeroDim s
Origin .+^ :: ZeroDim s -> Diff (ZeroDim s) -> ZeroDim s
.+^ Diff (ZeroDim s)
Origin = ZeroDim s
forall s. ZeroDim s
Origin
ZeroDim s
Origin .-. :: ZeroDim s -> ZeroDim s -> Diff (ZeroDim s)
.-. ZeroDim s
Origin = Diff (ZeroDim s)
forall s. ZeroDim s
Origin
instance AdditiveGroup (ZeroDim s) where
zeroV :: ZeroDim s
zeroV = ZeroDim s
forall s. ZeroDim s
Origin
ZeroDim s
Origin ^+^ :: ZeroDim s -> ZeroDim s -> ZeroDim s
^+^ ZeroDim s
Origin = ZeroDim s
forall s. ZeroDim s
Origin
negateV :: ZeroDim s -> ZeroDim s
negateV ZeroDim s
Origin = ZeroDim s
forall s. ZeroDim s
Origin
instance VectorSpace (ZeroDim s) where
type Scalar (ZeroDim s) = s
Scalar (ZeroDim s)
_ *^ :: Scalar (ZeroDim s) -> ZeroDim s -> ZeroDim s
*^ ZeroDim s
Origin = ZeroDim s
forall s. ZeroDim s
Origin
instance HasBasis (ZeroDim s) where
type Basis (ZeroDim s) = Void
basisValue :: Basis (ZeroDim s) -> ZeroDim s
basisValue = Basis (ZeroDim s) -> ZeroDim s
forall a. Void -> a
absurd
decompose :: ZeroDim s -> [(Basis (ZeroDim s), Scalar (ZeroDim s))]
decompose ZeroDim s
Origin = []
decompose' :: ZeroDim s -> Basis (ZeroDim s) -> Scalar (ZeroDim s)
decompose' ZeroDim s
Origin = Basis (ZeroDim s) -> Scalar (ZeroDim s)
forall a. Void -> a
absurd
instance (AdditiveGroup s) => InnerSpace (ZeroDim s) where
ZeroDim s
Origin <.> :: ZeroDim s -> ZeroDim s -> Scalar (ZeroDim s)
<.> ZeroDim s
Origin = Scalar (ZeroDim s)
forall v. AdditiveGroup v => v
zeroV