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