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
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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