diff options
-rw-r--r-- | examples/inplace.hs | 27 | ||||
-rw-r--r-- | lib/Data/Packed/ST.hs | 2 |
2 files changed, 29 insertions, 0 deletions
diff --git a/examples/inplace.hs b/examples/inplace.hs index 29fac6f..9f23e0c 100644 --- a/examples/inplace.hs +++ b/examples/inplace.hs | |||
@@ -18,6 +18,7 @@ main = sequence_[ | |||
18 | test5, | 18 | test5, |
19 | test6, | 19 | test6, |
20 | print test7, | 20 | print test7, |
21 | test8, | ||
21 | test0] | 22 | test0] |
22 | 23 | ||
23 | -- helper functions | 24 | -- helper functions |
@@ -112,3 +113,29 @@ test0 = do | |||
112 | print m | 113 | print m |
113 | --print hv | 114 | --print hv |
114 | --print hm | 115 | --print hm |
116 | |||
117 | ------------------------------------------------- | ||
118 | |||
119 | histogram n ds = runSTVector $ do | ||
120 | h <- newVector (0::Double) n -- number of bins | ||
121 | let inc k = modifyVector h k (+1) | ||
122 | mapM_ inc ds | ||
123 | return h | ||
124 | |||
125 | -- check that newVector is really called with a fresh new array | ||
126 | histoCheck ds = runSTVector $ do | ||
127 | h <- newVector (0::Double) 15 -- > constant for this test | ||
128 | let inc k = modifyVector h k (+1) | ||
129 | mapM_ inc ds | ||
130 | return h | ||
131 | |||
132 | |||
133 | test8 = do | ||
134 | let ds = [0..14] | ||
135 | print $ histogram 15 ds | ||
136 | print $ histogram 15 ds | ||
137 | print $ histogram 15 ds | ||
138 | print $ histoCheck ds | ||
139 | print $ histoCheck ds | ||
140 | print $ histoCheck ds | ||
141 | putStrLn "----------------------" | ||
diff --git a/lib/Data/Packed/ST.hs b/lib/Data/Packed/ST.hs index 1311ff9..ed0a05e 100644 --- a/lib/Data/Packed/ST.hs +++ b/lib/Data/Packed/ST.hs | |||
@@ -89,6 +89,7 @@ readVector = safeIndexV unsafeReadVector | |||
89 | writeVector :: Storable t => STVector s t -> Int -> t -> ST s () | 89 | writeVector :: Storable t => STVector s t -> Int -> t -> ST s () |
90 | writeVector = safeIndexV unsafeWriteVector | 90 | writeVector = safeIndexV unsafeWriteVector |
91 | 91 | ||
92 | {-# NOINLINE newVector #-} | ||
92 | newVector :: Element t => t -> Int -> ST s (STVector s t) | 93 | newVector :: Element t => t -> Int -> ST s (STVector s t) |
93 | newVector v = unsafeThawVector . constant v | 94 | newVector v = unsafeThawVector . constant v |
94 | 95 | ||
@@ -154,5 +155,6 @@ readMatrix = safeIndexM unsafeReadMatrix | |||
154 | writeMatrix :: Storable t => STMatrix s t -> Int -> Int -> t -> ST s () | 155 | writeMatrix :: Storable t => STMatrix s t -> Int -> Int -> t -> ST s () |
155 | writeMatrix = safeIndexM unsafeWriteMatrix | 156 | writeMatrix = safeIndexM unsafeWriteMatrix |
156 | 157 | ||
158 | {-# NOINLINE newMatrix #-} | ||
157 | newMatrix :: Element t => t -> Int -> Int -> ST s (STMatrix s t) | 159 | newMatrix :: Element t => t -> Int -> Int -> ST s (STMatrix s t) |
158 | newMatrix v r c = unsafeThawMatrix . reshape c . constant v $ r*c | 160 | newMatrix v r c = unsafeThawMatrix . reshape c . constant v $ r*c |