module Data.Vector.V4 where
import Data.Vector.Class
data Vector4 = Vector4 {v4x, v4y, v4z, v4w :: !Scalar} deriving (Eq, Show)
instance BasicVector Vector4 where
vmap f (Vector4 x y z w ) = Vector4 (f x) (f y) (f z) (f w)
vzip f (Vector4 x1 y1 z1 w1) (Vector4 x2 y2 z2 w2) = Vector4 (f x1 x2) (f y1 y2) (f z1 z2) (f w1 w2)
vfold f (Vector4 x y z w ) = f (f x y) (f z w)
vpack (x:y:z:w:_) = Just $ Vector4 x y z w
vpack _ = Nothing
vunpack (Vector4 x y z w) = [x,y,z,w]
vpromote x = Vector4 x x x x
instance Num Vector4 where
(+) = vzip (+)
() = vzip ()
(*) = vzip (*)
abs = vmap abs
signum = vmap signum
fromInteger = vpromote . fromInteger
instance Fractional Vector4 where
(/) = vzip (/)
recip = vmap recip
fromRational = vpromote . fromRational
instance Vector Vector4 where