summaryrefslogtreecommitdiff
path: root/examples
diff options
context:
space:
mode:
authorVivian McPhail <haskell.vivian.mcphail@gmail.com>2010-07-13 22:59:22 +0000
committerVivian McPhail <haskell.vivian.mcphail@gmail.com>2010-07-13 22:59:22 +0000
commitc104df60266d5e0bc94e5b0a7eedc1d949975fc1 (patch)
tree98416f80a8715d226e597dcfbc2d7aecb485a05a /examples
parent7659d9c67f75e1f665d6b02663ee8767e97762b4 (diff)
fix mapVectorM(_) and add example
Diffstat (limited to 'examples')
-rw-r--r--examples/vector-map.hs42
1 files changed, 42 insertions, 0 deletions
diff --git a/examples/vector-map.hs b/examples/vector-map.hs
new file mode 100644
index 0000000..d778358
--- /dev/null
+++ b/examples/vector-map.hs
@@ -0,0 +1,42 @@
1-- use of vectorMapM
2--
3
4-------------------------------------------
5
6import Data.Packed.Vector
7import Numeric.LinearAlgebra.Interface
8
9import Control.Monad.State
10import Control.Monad.Trans
11
12-------------------------------------------
13
14-- an instance of MonadIO, a monad transformer
15type VectorMonadT = StateT Int IO
16
17v :: Vector Int
18v = fromList $ take 10 [0..]
19
20test1 :: Vector Int -> IO (Vector Int)
21test1 = do
22 mapVectorM (\x -> do
23 putStr $ (show) x ++ " "
24 return (x + 1))
25
26-- we can have an arbitrary monad AND do IO
27addInitialM :: Vector Int -> VectorMonadT ()
28addInitialM = mapVectorM_ (\x -> do
29 i <- get
30 liftIO $ putStr $ (show $ x + i) ++ " "
31 put $ x + i
32 )
33
34-------------------------------------------
35main = do
36 v' <- test1 v
37 putStrLn ""
38 putStrLn $ show v'
39 evalStateT (addInitialM v) 1
40 putStrLn ""
41 return ()
42