0 | module Data.NumIdr.Transform.Point
3 | import Data.NumIdr.PrimArray
4 | import Data.NumIdr.Array
5 | import Data.NumIdr.Vector
6 | import Data.NumIdr.Matrix
7 | import Data.NumIdr.Interfaces
16 | record Point n a where
30 | fromVector : Vector n a -> Point n a
31 | fromVector = MkPoint
35 | toVector : Point n a -> Vector n a
40 | point : Vect n a -> Point n a
41 | point = fromVector . vector
46 | origin : Num a => {n : Nat} -> Point n a
47 | origin = fromVector $
zeros [n]
60 | index : Fin n -> Point n a -> a
61 | index i (MkPoint v) = index i v
67 | (!!) : Point n a -> Fin n -> a
73 | indexNB : Nat -> Point n a -> Maybe a
74 | indexNB n (MkPoint v) = indexNB n v
81 | (!?) : Point n a -> Nat -> Maybe a
87 | toVect : Point n a -> Vect n a
88 | toVect = toVect . vec
95 | (.x) : Point (1 + n) a -> a
100 | (.y) : Point (2 + n) a -> a
101 | (.y) = index (FS FZ)
105 | (.z) : Point (3 + n) a -> a
106 | (.z) = index (FS (FS FZ))
123 | (+.) : Num a => Vector n a -> Point n a -> Point n a
124 | a +. MkPoint b = MkPoint (zipWith (+) a b)
128 | (.+) : Num a => Point n a -> Vector n a -> Point n a
129 | MkPoint a .+ b = MkPoint (zipWith (+) a b)
134 | (-.) : Neg a => Point n a -> Point n a -> Vector n a
135 | MkPoint a -. MkPoint b = zipWith (-) a b
144 | Zippable (Point n) where
145 | zipWith f (MkPoint v1) (MkPoint v2) = MkPoint (zipWith f v1 v2)
146 | zipWith3 f (MkPoint v1) (MkPoint v2) (MkPoint v3) = MkPoint (zipWith3 f v1 v2 v3)
147 | unzipWith f (MkPoint v) = bimap MkPoint MkPoint (unzipWith f v)
148 | unzipWith3 f (MkPoint v) = bimap MkPoint (bimap MkPoint MkPoint) (unzipWith3 f v)
151 | Functor (Point n) where
152 | map f (MkPoint v) = MkPoint (map f v)
155 | {n : _} -> Applicative (Point n) where
156 | pure = MkPoint . pure
157 | MkPoint f <*> MkPoint v = MkPoint (f <*> v)
159 | {n : _} -> Monad (Point n) where
160 | join (MkPoint v) = MkPoint $
join $
map unwrap v
162 | unwrap : Point n a -> Vector n a
163 | unwrap (MkPoint x) = x
166 | Foldable (Point n) where
167 | foldl f z (MkPoint v) = foldl f z v
168 | foldr f z (MkPoint v) = foldr f z v
169 | null (MkPoint v) = null v
170 | toList (MkPoint v) = toList v
173 | Traversable (Point n) where
174 | traverse f (MkPoint v) = map MkPoint (traverse f v)
177 | Show a => Show (Point n a) where
178 | showPrec d (MkPoint v) = showCon d "point" $
showArg $
toVect v
181 | Cast a b => Cast (Point n a) (Point n b) where
182 | cast (MkPoint v) = MkPoint (cast v)
185 | Num a => Mult (Matrix m n a) (Point n a) (Point m a) where
186 | mat *. MkPoint v = MkPoint (mat *. v)