-- |
-- Module      : Math.Manifold.VectorSpace.ZeroDimensional
-- Copyright   : (c) Justus Sagemüller 2016
-- License     : GPL v3
-- 
-- Maintainer  : (@) jsag $ hvl.no
-- Stability   : experimental
-- Portability : portable
-- 
{-# 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
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
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 = forall s. ZeroDim s
Origin
instance Monoid (ZeroDim s) where
  mempty :: ZeroDim s
mempty = forall s. ZeroDim s
Origin
  mappend :: ZeroDim s -> ZeroDim s -> ZeroDim s
mappend = 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)
ZeroDim s
Origin = forall s. ZeroDim s
Origin
  ZeroDim s
Origin .-. :: ZeroDim s -> ZeroDim s -> Diff (ZeroDim s)
.-. ZeroDim s
Origin = forall s. ZeroDim s
Origin
instance AdditiveGroup (ZeroDim s) where
  zeroV :: ZeroDim s
zeroV = forall s. ZeroDim s
Origin
  ZeroDim s
Origin ^+^ :: ZeroDim s -> ZeroDim s -> ZeroDim s
^+^ ZeroDim s
Origin = forall s. ZeroDim s
Origin
  negateV :: ZeroDim s -> ZeroDim s
negateV ZeroDim s
Origin = 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 = forall s. ZeroDim s
Origin
instance HasBasis (ZeroDim s) where
  type Basis (ZeroDim s) = Void
  basisValue :: Basis (ZeroDim s) -> ZeroDim s
basisValue = 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 = 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 = forall v. AdditiveGroup v => v
zeroV