packages feed

hgeometry-0.14: src/Algorithms/Geometry/SoS/AsPoint.hs

module Algorithms.Geometry.SoS.AsPoint where

import           Control.CanAquire
import           Data.Ext
import           Data.Geometry.Point.Internal
import           Data.Geometry.Properties
import           Data.Geometry.Vector

--------------------------------------------------------------------------------
-- | a P is a 'read only' point in d dimensions
newtype P i d r = P i deriving (Eq, Show)

-- | Indxec type that can disambiguate points
newtype SoSIndex i = SoSIndex i deriving (Show,Eq,Ord)

instance HasIndex (P i d r) i where
  indexOf (P i) = i

instance Int `CanAquire` Point d r => P Int d r `CanAquire` Point d r where
  aquire (P i) = aquire i

type instance NumType   (P i d r) = r
type instance Dimension (P i d r) = d

asPointWithIndex       :: (Arity d, i `CanAquire` Point d r)
                       => P i d r -> Point d r :+ SoSIndex i
asPointWithIndex (P i) = aquire i :+ SoSIndex i