summaryrefslogtreecommitdiff
path: root/lib/GSL
diff options
context:
space:
mode:
authorAlberto Ruiz <aruiz@um.es>2007-09-08 09:46:33 +0000
committerAlberto Ruiz <aruiz@um.es>2007-09-08 09:46:33 +0000
commit34380f2b5d7b048a4d68197f16a8db0e53742030 (patch)
tree444aff88cda5c247d49bac0d294d8cfb9ef7bf23 /lib/GSL
parent0c38c1b0e122a56ea98c494e60ba90afe2688664 (diff)
type classes
Diffstat (limited to 'lib/GSL')
-rw-r--r--lib/GSL/Compat.hs7
-rw-r--r--lib/GSL/Vector.hs31
2 files changed, 5 insertions, 33 deletions
diff --git a/lib/GSL/Compat.hs b/lib/GSL/Compat.hs
index 560a7d8..809a1f5 100644
--- a/lib/GSL/Compat.hs
+++ b/lib/GSL/Compat.hs
@@ -1,4 +1,4 @@
1{-# OPTIONS_GHC -fglasgow-exts #-} 1{-# OPTIONS_GHC -fglasgow-exts -fallow-undecidable-instances #-}
2----------------------------------------------------------------------------- 2-----------------------------------------------------------------------------
3{- | 3{- |
4Module : GSL.Compat 4Module : GSL.Compat
@@ -23,6 +23,7 @@ import Data.Packed.Internal hiding (dsp)
23import Data.Packed.Vector 23import Data.Packed.Vector
24import Data.Packed.Matrix 24import Data.Packed.Matrix
25import GSL.Vector 25import GSL.Vector
26import LinearAlgebra.Linear
26import GSL.Matrix 27import GSL.Matrix
27import LinearAlgebra.Algorithms 28import LinearAlgebra.Algorithms
28import Complex 29import Complex
@@ -49,7 +50,7 @@ compat' m1 m2 = rows m1 == 1 && cols m1 == 1
49instance (Eq a, Field a) => Eq (Vector a) where 50instance (Eq a, Field a) => Eq (Vector a) where
50 a == b = dim a == dim b && toList a == toList b 51 a == b = dim a == dim b && toList a == toList b
51 52
52instance (Num a, Field a) => Num (Vector a) where 53instance (Linear Vector a) => Num (Vector a) where
53 (+) = adaptScalar addConstant add (flip addConstant) 54 (+) = adaptScalar addConstant add (flip addConstant)
54 negate = scale (-1) 55 negate = scale (-1)
55 (*) = adaptScalar scale mul (flip scale) 56 (*) = adaptScalar scale mul (flip scale)
@@ -60,7 +61,7 @@ instance (Num a, Field a) => Num (Vector a) where
60instance (Eq a, Field a) => Eq (Matrix a) where 61instance (Eq a, Field a) => Eq (Matrix a) where
61 a == b = rows a == rows b && cols a == cols b && cdat a == cdat b && fdat a == fdat b 62 a == b = rows a == rows b && cols a == cols b && cdat a == cdat b && fdat a == fdat b
62 63
63instance (Num a, Field a) => Num (Matrix a) where 64instance (Field a, Linear Vector a) => Num (Matrix a) where
64 (+) = liftMatrix2' (+) 65 (+) = liftMatrix2' (+)
65 negate = liftMatrix negate 66 negate = liftMatrix negate
66 (*) = liftMatrix2' (*) 67 (*) = liftMatrix2' (*)
diff --git a/lib/GSL/Vector.hs b/lib/GSL/Vector.hs
index 0b3c3a9..b405ff8 100644
--- a/lib/GSL/Vector.hs
+++ b/lib/GSL/Vector.hs
@@ -17,8 +17,7 @@ module GSL.Vector (
17 FunCodeS(..), toScalarR, 17 FunCodeS(..), toScalarR,
18 FunCodeV(..), vectorMapR, vectorMapC, 18 FunCodeV(..), vectorMapR, vectorMapC,
19 FunCodeSV(..), vectorMapValR, vectorMapValC, 19 FunCodeSV(..), vectorMapValR, vectorMapValC,
20 FunCodeVV(..), vectorZipR, vectorZipC, 20 FunCodeVV(..), vectorZipR, vectorZipC
21 scale, addConstant, add, sub, mul,
22) where 21) where
23 22
24import Data.Packed.Internal.Common 23import Data.Packed.Internal.Common
@@ -70,34 +69,6 @@ data FunCodeS = Norm2
70 | Min 69 | Min
71 deriving Enum 70 deriving Enum
72 71
73
74scale :: (Num a, Field a) => a -> Vector a -> Vector a
75scale x v | isReal baseOf v = scast $ vectorMapValR Scale (scast x) (scast v)
76 | isComp baseOf v = scast $ vectorMapValC Scale (scast x) (scast v)
77 | otherwise = fromList $ map (*x) $ toList v
78
79addConstant :: (Num a, Field a) => a -> Vector a -> Vector a
80addConstant x v | isReal baseOf v = scast $ vectorMapValR AddConstant (scast x) (scast v)
81 | isComp baseOf v = scast $ vectorMapValC AddConstant (scast x) (scast v)
82 | otherwise = fromList $ map (*x) $ toList v
83
84add :: (Num a, Field a) => Vector a -> Vector a -> Vector a
85add u v | isReal baseOf v = scast $ vectorZipR Add (scast u) (scast v)
86 | isComp baseOf v = scast $ vectorZipC Add (scast u) (scast v)
87 | otherwise = fromList $ zipWith (+) (toList u) (toList v)
88
89sub :: (Num a, Field a) => Vector a -> Vector a -> Vector a
90sub u v | isReal baseOf v = scast $ vectorZipR Sub (scast u) (scast v)
91 | isComp baseOf v = scast $ vectorZipC Sub (scast u) (scast v)
92 | otherwise = fromList $ zipWith (-) (toList u) (toList v)
93
94mul :: (Num a, Field a) => Vector a -> Vector a -> Vector a
95mul u v | isReal baseOf v = scast $ vectorZipR Mul (scast u) (scast v)
96 | isComp baseOf v = scast $ vectorZipC Mul (scast u) (scast v)
97 | otherwise = fromList $ zipWith (*) (toList u) (toList v)
98
99
100
101------------------------------------------------------------------ 72------------------------------------------------------------------
102 73
103toScalarAux fun code v = unsafePerformIO $ do 74toScalarAux fun code v = unsafePerformIO $ do