module Algorithms.Geometry.SoS.AsPoint where
import Control.CanAquire
import Control.Lens
import Data.Ext
import Data.Geometry.Point.Class
import Data.Geometry.Point.Internal
import Data.Geometry.Properties
import Data.Geometry.Vector
newtype P i d r = P i deriving (Eq, Show)
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)