Vec 1.0.1 → 1.0.5
raw patch · 3 files changed
+126/−28 lines, 3 filesPVP: major bump suggested
API removals or changes: PVP suggests a major version bump
API changes (from Hackage documentation)
- Data.Vec.LinAlg: instance [overlap ok] (Num a, Pivot a (r :. ())) => GaussElim a (r :. ())
- Data.Vec.Packed: instance [overlap ok] (Eq v, PackedVec v) => Eq (Packed v)
- Data.Vec.Packed: instance [overlap ok] (Ord v, PackedVec v) => Ord (Packed v)
- Data.Vec.Packed: instance [overlap ok] (Show v, PackedVec v) => Show (Packed v)
+ Data.Vec.LinAlg: instance [overlap ok] (Num a, Pivot a ((a :. r) :. ())) => GaussElim a ((a :. r) :. ())
+ Data.Vec.Packed: instance [overlap ok] Eq (Packed (Vec2 Bool))
+ Data.Vec.Packed: instance [overlap ok] Eq (Packed (Vec2 CDouble))
+ Data.Vec.Packed: instance [overlap ok] Eq (Packed (Vec2 CFloat))
+ Data.Vec.Packed: instance [overlap ok] Eq (Packed (Vec2 CInt))
+ Data.Vec.Packed: instance [overlap ok] Eq (Packed (Vec2 Double))
+ Data.Vec.Packed: instance [overlap ok] Eq (Packed (Vec2 Float))
+ Data.Vec.Packed: instance [overlap ok] Eq (Packed (Vec2 Int))
+ Data.Vec.Packed: instance [overlap ok] Eq (Packed (Vec3 Bool))
+ Data.Vec.Packed: instance [overlap ok] Eq (Packed (Vec3 CDouble))
+ Data.Vec.Packed: instance [overlap ok] Eq (Packed (Vec3 CFloat))
+ Data.Vec.Packed: instance [overlap ok] Eq (Packed (Vec3 CInt))
+ Data.Vec.Packed: instance [overlap ok] Eq (Packed (Vec3 Double))
+ Data.Vec.Packed: instance [overlap ok] Eq (Packed (Vec3 Float))
+ Data.Vec.Packed: instance [overlap ok] Eq (Packed (Vec3 Int))
+ Data.Vec.Packed: instance [overlap ok] Eq (Packed (Vec4 Bool))
+ Data.Vec.Packed: instance [overlap ok] Eq (Packed (Vec4 CDouble))
+ Data.Vec.Packed: instance [overlap ok] Eq (Packed (Vec4 CFloat))
+ Data.Vec.Packed: instance [overlap ok] Eq (Packed (Vec4 CInt))
+ Data.Vec.Packed: instance [overlap ok] Eq (Packed (Vec4 Double))
+ Data.Vec.Packed: instance [overlap ok] Eq (Packed (Vec4 Float))
+ Data.Vec.Packed: instance [overlap ok] Eq (Packed (Vec4 Int))
+ Data.Vec.Packed: instance [overlap ok] Ord (Packed (Vec2 Bool))
+ Data.Vec.Packed: instance [overlap ok] Ord (Packed (Vec2 CDouble))
+ Data.Vec.Packed: instance [overlap ok] Ord (Packed (Vec2 CFloat))
+ Data.Vec.Packed: instance [overlap ok] Ord (Packed (Vec2 CInt))
+ Data.Vec.Packed: instance [overlap ok] Ord (Packed (Vec2 Double))
+ Data.Vec.Packed: instance [overlap ok] Ord (Packed (Vec2 Float))
+ Data.Vec.Packed: instance [overlap ok] Ord (Packed (Vec2 Int))
+ Data.Vec.Packed: instance [overlap ok] Ord (Packed (Vec3 Bool))
+ Data.Vec.Packed: instance [overlap ok] Ord (Packed (Vec3 CDouble))
+ Data.Vec.Packed: instance [overlap ok] Ord (Packed (Vec3 CFloat))
+ Data.Vec.Packed: instance [overlap ok] Ord (Packed (Vec3 CInt))
+ Data.Vec.Packed: instance [overlap ok] Ord (Packed (Vec3 Double))
+ Data.Vec.Packed: instance [overlap ok] Ord (Packed (Vec3 Float))
+ Data.Vec.Packed: instance [overlap ok] Ord (Packed (Vec3 Int))
+ Data.Vec.Packed: instance [overlap ok] Ord (Packed (Vec4 Bool))
+ Data.Vec.Packed: instance [overlap ok] Ord (Packed (Vec4 CDouble))
+ Data.Vec.Packed: instance [overlap ok] Ord (Packed (Vec4 CFloat))
+ Data.Vec.Packed: instance [overlap ok] Ord (Packed (Vec4 CInt))
+ Data.Vec.Packed: instance [overlap ok] Ord (Packed (Vec4 Double))
+ Data.Vec.Packed: instance [overlap ok] Ord (Packed (Vec4 Float))
+ Data.Vec.Packed: instance [overlap ok] Ord (Packed (Vec4 Int))
+ Data.Vec.Packed: instance [overlap ok] PackedVec (Vec2 CDouble)
+ Data.Vec.Packed: instance [overlap ok] PackedVec (Vec2 CFloat)
+ Data.Vec.Packed: instance [overlap ok] PackedVec (Vec2 CInt)
+ Data.Vec.Packed: instance [overlap ok] PackedVec (Vec3 CDouble)
+ Data.Vec.Packed: instance [overlap ok] PackedVec (Vec3 CFloat)
+ Data.Vec.Packed: instance [overlap ok] PackedVec (Vec3 CInt)
+ Data.Vec.Packed: instance [overlap ok] PackedVec (Vec4 CDouble)
+ Data.Vec.Packed: instance [overlap ok] PackedVec (Vec4 CFloat)
+ Data.Vec.Packed: instance [overlap ok] PackedVec (Vec4 CInt)
+ Data.Vec.Packed: instance [overlap ok] Read (Packed (Vec2 Bool))
+ Data.Vec.Packed: instance [overlap ok] Read (Packed (Vec2 CDouble))
+ Data.Vec.Packed: instance [overlap ok] Read (Packed (Vec2 CFloat))
+ Data.Vec.Packed: instance [overlap ok] Read (Packed (Vec2 CInt))
+ Data.Vec.Packed: instance [overlap ok] Read (Packed (Vec2 Double))
+ Data.Vec.Packed: instance [overlap ok] Read (Packed (Vec2 Float))
+ Data.Vec.Packed: instance [overlap ok] Read (Packed (Vec2 Int))
+ Data.Vec.Packed: instance [overlap ok] Read (Packed (Vec3 Bool))
+ Data.Vec.Packed: instance [overlap ok] Read (Packed (Vec3 CDouble))
+ Data.Vec.Packed: instance [overlap ok] Read (Packed (Vec3 CFloat))
+ Data.Vec.Packed: instance [overlap ok] Read (Packed (Vec3 CInt))
+ Data.Vec.Packed: instance [overlap ok] Read (Packed (Vec3 Double))
+ Data.Vec.Packed: instance [overlap ok] Read (Packed (Vec3 Float))
+ Data.Vec.Packed: instance [overlap ok] Read (Packed (Vec3 Int))
+ Data.Vec.Packed: instance [overlap ok] Read (Packed (Vec4 Bool))
+ Data.Vec.Packed: instance [overlap ok] Read (Packed (Vec4 CDouble))
+ Data.Vec.Packed: instance [overlap ok] Read (Packed (Vec4 CFloat))
+ Data.Vec.Packed: instance [overlap ok] Read (Packed (Vec4 CInt))
+ Data.Vec.Packed: instance [overlap ok] Read (Packed (Vec4 Double))
+ Data.Vec.Packed: instance [overlap ok] Read (Packed (Vec4 Float))
+ Data.Vec.Packed: instance [overlap ok] Read (Packed (Vec4 Int))
+ Data.Vec.Packed: instance [overlap ok] Show (Packed (Vec2 Bool))
+ Data.Vec.Packed: instance [overlap ok] Show (Packed (Vec2 CDouble))
+ Data.Vec.Packed: instance [overlap ok] Show (Packed (Vec2 CFloat))
+ Data.Vec.Packed: instance [overlap ok] Show (Packed (Vec2 CInt))
+ Data.Vec.Packed: instance [overlap ok] Show (Packed (Vec2 Double))
+ Data.Vec.Packed: instance [overlap ok] Show (Packed (Vec2 Float))
+ Data.Vec.Packed: instance [overlap ok] Show (Packed (Vec2 Int))
+ Data.Vec.Packed: instance [overlap ok] Show (Packed (Vec3 Bool))
+ Data.Vec.Packed: instance [overlap ok] Show (Packed (Vec3 CDouble))
+ Data.Vec.Packed: instance [overlap ok] Show (Packed (Vec3 CFloat))
+ Data.Vec.Packed: instance [overlap ok] Show (Packed (Vec3 CInt))
+ Data.Vec.Packed: instance [overlap ok] Show (Packed (Vec3 Double))
+ Data.Vec.Packed: instance [overlap ok] Show (Packed (Vec3 Float))
+ Data.Vec.Packed: instance [overlap ok] Show (Packed (Vec3 Int))
+ Data.Vec.Packed: instance [overlap ok] Show (Packed (Vec4 Bool))
+ Data.Vec.Packed: instance [overlap ok] Show (Packed (Vec4 CDouble))
+ Data.Vec.Packed: instance [overlap ok] Show (Packed (Vec4 CFloat))
+ Data.Vec.Packed: instance [overlap ok] Show (Packed (Vec4 CInt))
+ Data.Vec.Packed: instance [overlap ok] Show (Packed (Vec4 Double))
+ Data.Vec.Packed: instance [overlap ok] Show (Packed (Vec4 Float))
+ Data.Vec.Packed: instance [overlap ok] Show (Packed (Vec4 Int))
+ Data.Vec.Packed: type Vec2CD = Packed (Vec2 CDouble)
+ Data.Vec.Packed: type Vec2CF = Packed (Vec2 CFloat)
+ Data.Vec.Packed: type Vec2CI = Packed (Vec2 CInt)
+ Data.Vec.Packed: type Vec3CD = Packed (Vec3 CDouble)
+ Data.Vec.Packed: type Vec3CF = Packed (Vec3 CFloat)
+ Data.Vec.Packed: type Vec3CI = Packed (Vec3 CInt)
+ Data.Vec.Packed: type Vec4CD = Packed (Vec4 CDouble)
+ Data.Vec.Packed: type Vec4CF = Packed (Vec4 CFloat)
+ Data.Vec.Packed: type Vec4CI = Packed (Vec4 CInt)
- Data.Vec.LinAlg: dot :: (Num a, Num v, Fold v a) => v -> v -> a
+ Data.Vec.LinAlg: dot :: (Num a, Fold v a, ZipWith a a a v v v) => v -> v -> a
- Data.Vec.LinAlg: multmm :: (Map v v' m1 m3, Map v a b v', Transpose m2 b, Fold v a, Num v, Num a) => m1 -> m2 -> m3
+ Data.Vec.LinAlg: multmm :: (Map v v' m1 m3, Map v a b v', Transpose m2 b, Fold v a, ZipWith a a a v v v, Num v, Num a) => m1 -> m2 -> m3
- Data.Vec.LinAlg: multmv :: (Map v a m v', Num v, Fold v a, Num a) => m -> v -> v'
+ Data.Vec.LinAlg: multmv :: (Map v a m v', Num v, Fold v a, ZipWith a a a v v v, Num a) => m -> v -> v'
- Data.Vec.LinAlg: multvm :: (Transpose m mt, Map v a mt v', Fold v a, Num a, Num v) => v -> m -> v'
+ Data.Vec.LinAlg: multvm :: (Transpose m mt, Map v a mt v', Fold v a, ZipWith a a a v v v, Num a, Num v) => v -> m -> v'
- Data.Vec.LinAlg: norm :: (Num v, Floating a, Fold v a) => v -> a
+ Data.Vec.LinAlg: norm :: (Num v, Floating a, Fold v a, ZipWith a a a v v v) => v -> a
- Data.Vec.LinAlg: normSq :: (Num a, Num v, Fold v a) => v -> a
+ Data.Vec.LinAlg: normSq :: (Num a, Num v, Fold v a, ZipWith a a a v v v) => v -> a
- Data.Vec.LinAlg: normalize :: (Floating a, Num v, Fold v a, Map a a v v) => v -> v
+ Data.Vec.LinAlg: normalize :: (Floating a, Num v, Fold v a, Map a a v v, ZipWith a a a v v v) => v -> v
Files
- Data/Vec/LinAlg.hs +14/−12
- Data/Vec/Packed.hs +111/−15
- Vec.cabal +1/−1
Data/Vec/LinAlg.hs view
@@ -53,7 +53,7 @@ ,rotationLookAt ,scaling ,perspective- ,orthogonal + ,orthogonal ) where import Prelude hiding (map,zipWith,foldl,foldr,reverse,take,drop,@@ -66,23 +66,23 @@ import Data.Maybe -- | dot \/ inner \/ scalar product-dot :: (Num a, Num v, Fold v a) => v -> v -> a-dot u v = sum (u*v)+dot :: (Num a, Fold v a, ZipWith a a a v v v) => v -> v -> a+dot u v = fold (+) (zipWith (*) u v) {-# INLINE dot #-} -- | vector norm, squared-normSq :: (Num a, Num v, Fold v a) => v -> a+normSq :: (Num a, Num v, Fold v a, ZipWith a a a v v v) => v -> a normSq v = dot v v {-# INLINE normSq #-} -- | vector \/ L2 \/ Euclidean norm-norm :: (Num v, Floating a, Fold v a) => v -> a+norm :: (Num v, Floating a, Fold v a, ZipWith a a a v v v) => v -> a norm v = sqrt (dot v v) {-# INLINE norm #-} -- | @normalize v@ is a unit vector in the direction of @v@. @v@ is assumed -- non-null.-normalize :: (Floating a, Num v, Fold v a, Map a a v v) => v -> v+normalize :: (Floating a, Num v, Fold v a, Map a a v v, ZipWith a a a v v v) => v -> v normalize v = map (/ norm v) v {-# INLINE normalize #-} @@ -119,6 +119,7 @@ ( Transpose m mt , Map v a mt v' , Fold v a+ , ZipWith a a a v v v , Num a , Num v ) => v -> m -> v'@@ -130,6 +131,7 @@ ( Map v a m v' , Num v , Fold v a+ , ZipWith a a a v v v , Num a ) => m -> v -> v' multmv m v = map (dot v) m@@ -141,6 +143,7 @@ ,Map v a b v' ,Transpose m2 b ,Fold v a+ ,ZipWith a a a v v v ,Num v ,Num a ) => m1 -> m2 -> m3@@ -230,7 +233,7 @@ -class SetDiagonal v m | m -> v, v -> m where+class SetDiagonal v m where -- |set the diagonal of an n-by-n matrix to a given n-vector setDiagonal :: v -> m -> m @@ -528,7 +531,6 @@ class Pivot1 a m where pivot1 :: m -> Maybe (m,a) ---this instance prevents a fundep inferring type of a from m. instance Pivot1 a () where pivot1 _ = Nothing @@ -561,7 +563,7 @@ where pivot1 (row@(p:._):.rows) | nearZero p = pivot1 rows >>= \(r:.rs,p)-> Just(r:.row:.rs,p)- | otherwise = Just ( first :. map add rows , p)+ | otherwise = Just (first :. map add rows , p) where first = map (/p) row add r@(x:._) = zipWith (-) r . map (*x) $ first {-# INLINE pivot1 #-}@@ -570,11 +572,11 @@ -- Pivot : find a pivot. Second return argument tracks determinant. -- Returns Nothing if no pivot anywhere. -class Pivot a m | m -> a where+class Pivot a m where pivot :: m -> Maybe (m,a) instance Pivot a (():.v) where- pivot _ = Nothing+ pivot m = Nothing {-# INLINE pivot #-} instance@@ -609,7 +611,7 @@ gaussElim :: m -> (m,a) -instance (Num a, Pivot a (r:.())) => GaussElim a (r:.())+instance (Num a, Pivot a ((a :. r):.())) => GaussElim a ((a :. r):.()) where gaussElim m = fromMaybe (m,1) (pivot m) {-# INLINE gaussElim #-}
Data/Vec/Packed.hs view
@@ -58,6 +58,7 @@ import Data.Word import Data.Int import Foreign+import Foreign.C import Data.Array.Base as Array import GHC.ST ( ST(..), runST )@@ -86,10 +87,9 @@ unpack (pack x) = x; #-} -- instance PackedVec (Vec2 Bool) where data Packed (Vec2 Bool) = Vec2B !Bool !Bool+ deriving (Eq, Ord, Show, Read) pack (a:.b:.()) = Vec2B a b unpack (Vec2B a b) = a:.b:.() {-# INLINE pack #-}@@ -97,6 +97,7 @@ instance PackedVec (Vec3 Bool) where data Packed (Vec3 Bool) = Vec3B !Bool !Bool !Bool+ deriving (Eq, Ord, Show, Read) pack (a:.b:.c:.()) = Vec3B a b c unpack (Vec3B a b c) = a:.b:.c:.() {-# INLINE pack #-}@@ -104,6 +105,7 @@ instance PackedVec (Vec4 Bool) where data Packed (Vec4 Bool) = Vec4B !Bool !Bool !Bool !Bool+ deriving (Eq, Ord, Show, Read) pack (a:.b:.c:.d:.()) = Vec4B a b c d unpack (Vec4B a b c d) = a:.b:.c:.d:.() {-# INLINE pack #-}@@ -119,6 +121,7 @@ instance PackedVec (Vec2 Int) where data Packed (Vec2 Int) = Vec2I {-#UNPACK#-} !Int {-#UNPACK#-} !Int+ deriving (Eq, Ord, Show, Read) pack (a:.b:.()) = Vec2I a b unpack (Vec2I a b) = a:.b:.() {-# INLINE pack #-}@@ -126,6 +129,7 @@ instance PackedVec (Vec3 Int) where data Packed (Vec3 Int) = Vec3I {-#UNPACK#-} !Int {-#UNPACK#-} !Int {-#UNPACK#-} !Int+ deriving (Eq, Ord, Show, Read) pack (a:.b:.c:.()) = Vec3I a b c; unpack (Vec3I a b c) = a:.b:.c:.(); {-# INLINE pack #-}@@ -133,6 +137,7 @@ instance PackedVec (Vec4 Int) where data Packed (Vec4 Int) = Vec4I {-#UNPACK#-} !Int {-#UNPACK#-} !Int {-#UNPACK#-} !Int {-#UNPACK#-} !Int+ deriving (Eq, Ord, Show, Read) pack (a:.b:.c:.d:.()) = Vec4I a b c d unpack (Vec4I a b c d) = a:.b:.c:.d:.() {-# INLINE pack #-}@@ -148,6 +153,7 @@ instance PackedVec (Vec2 Float) where data Packed (Vec2 Float) = Vec2F {-#UNPACK#-} !Float {-#UNPACK#-} !Float+ deriving (Eq, Ord, Show, Read) pack (a:.b:.()) = Vec2F a b unpack (Vec2F a b) = a:.b:.() {-# INLINE pack #-}@@ -155,6 +161,7 @@ instance PackedVec (Vec3 Float) where data Packed (Vec3 Float) = Vec3F {-#UNPACK#-} !Float {-#UNPACK#-} !Float {-#UNPACK#-} !Float+ deriving (Eq, Ord, Show, Read) pack (a:.b:.c:.()) = Vec3F a b c; unpack (Vec3F a b c) = a:.b:.c:.(); {-# INLINE pack #-}@@ -162,6 +169,7 @@ instance PackedVec (Vec4 Float) where data Packed (Vec4 Float) = Vec4F {-#UNPACK#-} !Float {-#UNPACK#-} !Float {-#UNPACK#-} !Float {-#UNPACK#-} !Float+ deriving (Eq, Ord, Show, Read) pack (a:.b:.c:.d:.()) = Vec4F a b c d unpack (Vec4F a b c d) = a:.b:.c:.d:.() {-# INLINE pack #-}@@ -177,6 +185,7 @@ instance PackedVec (Vec2 Double) where data Packed (Vec2 Double) = Vec2D {-#UNPACK#-} !Double {-#UNPACK#-} !Double+ deriving (Eq, Ord, Show, Read) pack (a:.b:.()) = Vec2D a b unpack (Vec2D a b) = a:.b:.() {-# INLINE pack #-}@@ -184,6 +193,7 @@ instance PackedVec (Vec3 Double) where data Packed (Vec3 Double) = Vec3D {-#UNPACK#-} !Double {-#UNPACK#-} !Double {-#UNPACK#-} !Double+ deriving (Eq, Ord, Show, Read) pack (a:.b:.c:.()) = Vec3D a b c; unpack (Vec3D a b c) = a:.b:.c:.(); {-# INLINE pack #-}@@ -191,6 +201,7 @@ instance PackedVec (Vec4 Double) where data Packed (Vec4 Double) = Vec4D {-#UNPACK#-} !Double {-#UNPACK#-} !Double {-#UNPACK#-} !Double {-#UNPACK#-} !Double+ deriving (Eq, Ord, Show, Read) pack (a:.b:.c:.d:.()) = Vec4D a b c d unpack (Vec4D a b c d) = a:.b:.c:.d:.() {-# INLINE pack #-}@@ -200,6 +211,104 @@ type Vec3D = Packed (Vec3 Double) type Vec4D = Packed (Vec4 Double) +++++instance PackedVec (Vec2 CFloat) where+ data Packed (Vec2 CFloat) = Vec2CF {-# UNPACK #-} !CFloat {-# UNPACK #-} !CFloat+ deriving (Eq, Ord, Show, Read)+ {-# INLINE pack #-}+ {-# INLINE unpack #-}+ pack (x:.y:.()) = Vec2CF x y+ unpack (Vec2CF x y) = x:.y:.()++instance PackedVec (Vec3 CFloat) where+ data Packed (Vec3 CFloat) = Vec3CF {-# UNPACK #-} !CFloat {-# UNPACK #-} !CFloat {-# UNPACK #-} !CFloat+ deriving (Eq, Ord, Show, Read)+ {-# INLINE pack #-}+ {-# INLINE unpack #-}+ pack (x:.y:.z:.()) = Vec3CF x y z+ unpack (Vec3CF x y z) = x:.y:.z:.()++instance PackedVec (Vec4 CFloat) where+ data Packed (Vec4 CFloat) = Vec4CF {-# UNPACK #-} !CFloat {-# UNPACK #-} !CFloat {-# UNPACK #-} !CFloat {-# UNPACK #-} !CFloat+ deriving (Eq, Ord, Show, Read)+ {-# INLINE pack #-}+ {-# INLINE unpack #-}+ pack (x:.y:.z:.w:.()) = Vec4CF x y z w+ unpack (Vec4CF x y z w) = x:.y:.z:.w:.()++type Vec2CF = Packed (Vec2 CFloat)+type Vec3CF = Packed (Vec3 CFloat)+type Vec4CF = Packed (Vec4 CFloat)++++++instance PackedVec (Vec2 CInt) where+ data Packed (Vec2 CInt) = Vec2CI {-# UNPACK #-} !CInt {-# UNPACK #-} !CInt+ deriving (Eq, Ord, Show, Read)+ {-# INLINE pack #-}+ {-# INLINE unpack #-}+ pack (x:.y:.()) = Vec2CI x y+ unpack (Vec2CI x y) = x:.y:.()++instance PackedVec (Vec3 CInt) where+ data Packed (Vec3 CInt) = Vec3CI {-# UNPACK #-} !CInt {-# UNPACK #-} !CInt {-# UNPACK #-} !CInt+ deriving (Eq, Ord, Show, Read)+ {-# INLINE pack #-}+ {-# INLINE unpack #-}+ pack (x:.y:.z:.()) = Vec3CI x y z+ unpack (Vec3CI x y z) = x:.y:.z:.()++instance PackedVec (Vec4 CInt) where+ data Packed (Vec4 CInt) = Vec4CI {-# UNPACK #-} !CInt {-# UNPACK #-} !CInt {-# UNPACK #-} !CInt {-# UNPACK #-} !CInt+ deriving (Eq, Ord, Show, Read)+ {-# INLINE pack #-}+ {-# INLINE unpack #-}+ pack (x:.y:.z:.w:.()) = Vec4CI x y z w+ unpack (Vec4CI x y z w) = x:.y:.z:.w:.()++type Vec2CI = Packed (Vec2 CInt)+type Vec3CI = Packed (Vec3 CInt)+type Vec4CI = Packed (Vec4 CInt)+++++instance PackedVec (Vec2 CDouble) where+ data Packed (Vec2 CDouble) = Vec2CD {-# UNPACK #-} !CDouble {-# UNPACK #-} !CDouble+ deriving (Eq, Ord, Show, Read)+ {-# INLINE pack #-}+ {-# INLINE unpack #-}+ pack (x:.y:.()) = Vec2CD x y+ unpack (Vec2CD x y) = x:.y:.()++instance PackedVec (Vec3 CDouble) where+ data Packed (Vec3 CDouble) = Vec3CD {-# UNPACK #-} !CDouble {-# UNPACK #-} !CDouble {-# UNPACK #-} !CDouble+ deriving (Eq, Ord, Show, Read)+ {-# INLINE pack #-}+ {-# INLINE unpack #-}+ pack (x:.y:.z:.()) = Vec3CD x y z+ unpack (Vec3CD x y z) = x:.y:.z:.()++instance PackedVec (Vec4 CDouble) where+ data Packed (Vec4 CDouble) = Vec4CD {-# UNPACK #-} !CDouble {-# UNPACK #-} !CDouble {-# UNPACK #-} !CDouble {-# UNPACK #-} !CDouble+ deriving (Eq, Ord, Show, Read)+ {-# INLINE pack #-}+ {-# INLINE unpack #-}+ pack (x:.y:.z:.w:.()) = Vec4CD x y z w+ unpack (Vec4CD x y z w) = x:.y:.z:.w:.()++type Vec2CD = Packed (Vec2 CDouble)+type Vec3CD = Packed (Vec3 CDouble)+type Vec4CD = Packed (Vec4 CDouble)++++ type Mat22D = Vec2 (Vec2D) type Mat23D = Vec2 (Vec3D) type Mat24D = Vec2 (Vec4D)@@ -216,19 +325,6 @@ unpackMat :: (Map (Packed row) row packedMat mat, PackedVec row) => packedMat -> mat unpackMat = map unpack--instance (Eq v, PackedVec v) => Eq (Packed v) where- u == v = unpack u == unpack v- u /= v = unpack u /= unpack v- {-# INLINE (==) #-}- {-# INLINE (/=) #-}--instance (Ord v, PackedVec v) => Ord (Packed v) where- compare u v = compare (unpack u) (unpack v)- {-# INLINE compare #-}--instance (Show v, PackedVec v) => Show (Packed v) where- show v = show (unpack v) instance (Map a b u v, PackedVec u, PackedVec v) => Map a b (Packed u) (Packed v)
Vec.cabal view
@@ -1,5 +1,5 @@ Name: Vec-Version: 1.0.1+Version: 1.0.5 License: BSD3 License-file: LICENSE Author: Scott E. Dillard