Mercurial > hg > Members > atton > delta_monad
annotate haskell/Example/DeltaM.hs @ 138:1f218e2d9de0
Rename function in example
author | Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp> |
---|---|
date | Sun, 15 Feb 2015 11:31:47 +0900 |
parents | 3f48bd08865f |
children | 861e35665469 |
rev | line source |
---|---|
134
3f48bd08865f
Rename and split with module for haskell codes
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
1 module Example.DeltaM where |
3f48bd08865f
Rename and split with module for haskell codes
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
2 |
3f48bd08865f
Rename and split with module for haskell codes
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
3 import Control.Monad.Writer |
3f48bd08865f
Rename and split with module for haskell codes
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
4 import Data.Numbers.Primes -- $ cabal install primes |
3f48bd08865f
Rename and split with module for haskell codes
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
5 |
3f48bd08865f
Rename and split with module for haskell codes
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
6 import Delta |
3f48bd08865f
Rename and split with module for haskell codes
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
7 import DeltaM |
3f48bd08865f
Rename and split with module for haskell codes
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
8 |
3f48bd08865f
Rename and split with module for haskell codes
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
9 |
3f48bd08865f
Rename and split with module for haskell codes
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
10 -- DeltaM examples |
3f48bd08865f
Rename and split with module for haskell codes
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
11 |
3f48bd08865f
Rename and split with module for haskell codes
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
12 -- DeltaM example utils |
3f48bd08865f
Rename and split with module for haskell codes
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
13 type DeltaLog = Writer [String] |
3f48bd08865f
Rename and split with module for haskell codes
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
14 type DeltaWithLog = DeltaM DeltaLog |
3f48bd08865f
Rename and split with module for haskell codes
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
15 |
3f48bd08865f
Rename and split with module for haskell codes
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
16 returnW :: (Show a) => a -> DeltaLog a |
3f48bd08865f
Rename and split with module for haskell codes
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
17 returnW x = do tell $ [show x] |
3f48bd08865f
Rename and split with module for haskell codes
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
18 return x |
3f48bd08865f
Rename and split with module for haskell codes
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
19 |
3f48bd08865f
Rename and split with module for haskell codes
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
20 dmap :: (m a -> b) -> DeltaM m a -> Delta b |
3f48bd08865f
Rename and split with module for haskell codes
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
21 dmap f (DeltaM d) = fmap f d |
3f48bd08865f
Rename and split with module for haskell codes
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
22 |
3f48bd08865f
Rename and split with module for haskell codes
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
23 deltaWithLogFromList :: (Show a) => [a] -> DeltaWithLog a |
3f48bd08865f
Rename and split with module for haskell codes
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
24 deltaWithLogFromList xs = DeltaM $ deltaFromList $ fmap returnW xs |
3f48bd08865f
Rename and split with module for haskell codes
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
25 |
3f48bd08865f
Rename and split with module for haskell codes
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
26 |
3f48bd08865f
Rename and split with module for haskell codes
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
27 -- example : prime filter |
138
1f218e2d9de0
Rename function in example
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
134
diff
changeset
|
28 -- usage : runWriter $ checkOut 0 $ numberCountM 30 -- run specific version |
1f218e2d9de0
Rename function in example
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
134
diff
changeset
|
29 -- : dmap runWriter $ numberCountM 30 -- run all version |
134
3f48bd08865f
Rename and split with module for haskell codes
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
30 |
3f48bd08865f
Rename and split with module for haskell codes
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
31 generatorM :: Int -> DeltaWithLog [Int] |
3f48bd08865f
Rename and split with module for haskell codes
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
32 generatorM x = let intList = [1..x] in |
3f48bd08865f
Rename and split with module for haskell codes
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
33 DeltaM $ deltaFromList $ fmap returnW $ replicate 2 intList |
3f48bd08865f
Rename and split with module for haskell codes
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
34 |
138
1f218e2d9de0
Rename function in example
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
134
diff
changeset
|
35 numberFilterM :: [Int] -> DeltaWithLog [Int] |
1f218e2d9de0
Rename function in example
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
134
diff
changeset
|
36 numberFilterM xs = let primeList = filter isPrime xs |
1f218e2d9de0
Rename function in example
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
134
diff
changeset
|
37 evenList = filter even xs in |
1f218e2d9de0
Rename function in example
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
134
diff
changeset
|
38 DeltaM $ deltaFromList $ fmap returnW [primeList, evenList] |
134
3f48bd08865f
Rename and split with module for haskell codes
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
39 |
3f48bd08865f
Rename and split with module for haskell codes
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
40 |
3f48bd08865f
Rename and split with module for haskell codes
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
41 countM :: [Int] -> DeltaWithLog Int |
138
1f218e2d9de0
Rename function in example
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
134
diff
changeset
|
42 countM xs = let numberCount = length xs in |
1f218e2d9de0
Rename function in example
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
134
diff
changeset
|
43 DeltaM $ deltaFromList $ fmap returnW $ replicate 2 numberCount |
134
3f48bd08865f
Rename and split with module for haskell codes
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
44 |
138
1f218e2d9de0
Rename function in example
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
134
diff
changeset
|
45 numberCountM :: Int -> DeltaWithLog Int |
1f218e2d9de0
Rename function in example
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
134
diff
changeset
|
46 numberCountM x = generatorM x >>= numberFilterM >>= countM |