packages feed

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 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