annotate haskell/Delta.hs @ 143:f241d521bf65

Merge
author Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
date Wed, 25 Feb 2015 14:36:02 +0900
parents 3f48bd08865f 3bbb68f0a1e3
children
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: 133
diff changeset
1 module Delta ( Delta(..) , deltaAppend , headDelta , tailDelta , deltaFromList) where
3f48bd08865f Rename and split with module for haskell codes
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 133
diff changeset
2
17
279ebcf670c4 Define Similar as Applicative
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
3 import Control.Applicative
134
3f48bd08865f Rename and split with module for haskell codes
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 133
diff changeset
4
18
c77397d0677f Try define Similar as Monad
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
5
85
a1723b3ea997 Mini refactors
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 84
diff changeset
6 -- Delta definition
58
1229ee398567 Mini fixes
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 57
diff changeset
7
57
dfcd72dc697e ReDefine Delta used non-empty-list for infinite changes
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 53
diff changeset
8 data Delta a = Mono a | Delta a (Delta a) deriving Show
17
279ebcf670c4 Define Similar as Applicative
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
9
73
0ad0ae7a3cbe Proving monad-law-1
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 69
diff changeset
10 instance (Eq a) => Eq (Delta a) where
0ad0ae7a3cbe Proving monad-law-1
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 69
diff changeset
11 (Mono x) == (Mono y) = x == y
0ad0ae7a3cbe Proving monad-law-1
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 69
diff changeset
12 (Mono _) == (Delta _ _) = False
0ad0ae7a3cbe Proving monad-law-1
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 69
diff changeset
13 (Delta x xs) == (Delta y ys) = (x == y) && (xs == ys)
0ad0ae7a3cbe Proving monad-law-1
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 69
diff changeset
14
58
1229ee398567 Mini fixes
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 57
diff changeset
15 -- basic functions
1229ee398567 Mini fixes
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 57
diff changeset
16
52
69a01cc80075 Define Delta for Infinite changes in Haskell
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 51
diff changeset
17 deltaAppend :: Delta a -> Delta a -> Delta a
57
dfcd72dc697e ReDefine Delta used non-empty-list for infinite changes
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 53
diff changeset
18 deltaAppend (Mono x) d = Delta x d
dfcd72dc697e ReDefine Delta used non-empty-list for infinite changes
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 53
diff changeset
19 deltaAppend (Delta x d) ds = Delta x (deltaAppend d ds)
47
1aefea69f71b Implement bubble sort by delta
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 46
diff changeset
20
69
295e8ed39c0c Change headDelta definition. return non-delta value
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 59
diff changeset
21 headDelta :: Delta a -> a
295e8ed39c0c Change headDelta definition. return non-delta value
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 59
diff changeset
22 headDelta (Mono x) = x
295e8ed39c0c Change headDelta definition. return non-delta value
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 59
diff changeset
23 headDelta (Delta x _) = x
14
116131b196bb Define fmap and mu
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
24
52
69a01cc80075 Define Delta for Infinite changes in Haskell
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 51
diff changeset
25 tailDelta :: Delta a -> Delta a
57
dfcd72dc697e ReDefine Delta used non-empty-list for infinite changes
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 53
diff changeset
26 tailDelta d@(Mono _) = d
dfcd72dc697e ReDefine Delta used non-empty-list for infinite changes
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 53
diff changeset
27 tailDelta (Delta _ ds) = ds
18
c77397d0677f Try define Similar as Monad
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
28
58
1229ee398567 Mini fixes
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 57
diff changeset
29 -- instance definitions
1229ee398567 Mini fixes
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 57
diff changeset
30
43
90b171e3a73e Rename to Delta from Similar
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 23
diff changeset
31 instance Functor Delta where
57
dfcd72dc697e ReDefine Delta used non-empty-list for infinite changes
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 53
diff changeset
32 fmap f (Mono x) = Mono (f x)
dfcd72dc697e ReDefine Delta used non-empty-list for infinite changes
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 53
diff changeset
33 fmap f (Delta x d) = Delta (f x) (fmap f d)
18
c77397d0677f Try define Similar as Monad
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
34
43
90b171e3a73e Rename to Delta from Similar
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 23
diff changeset
35 instance Applicative Delta where
57
dfcd72dc697e ReDefine Delta used non-empty-list for infinite changes
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 53
diff changeset
36 pure f = Mono f
dfcd72dc697e ReDefine Delta used non-empty-list for infinite changes
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 53
diff changeset
37 (Mono f) <*> (Mono x) = Mono (f x)
dfcd72dc697e ReDefine Delta used non-empty-list for infinite changes
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 53
diff changeset
38 df@(Mono f) <*> (Delta x d) = Delta (f x) (df <*> d)
dfcd72dc697e ReDefine Delta used non-empty-list for infinite changes
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 53
diff changeset
39 (Delta f df) <*> d@(Mono x) = Delta (f x) (df <*> d)
dfcd72dc697e ReDefine Delta used non-empty-list for infinite changes
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 53
diff changeset
40 (Delta f df) <*> (Delta x d) = Delta (f x) (df <*> d)
52
69a01cc80075 Define Delta for Infinite changes in Haskell
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 51
diff changeset
41
59
46b15f368905 Define bind and mu for Infinite Delta
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 58
diff changeset
42 bind :: (Delta a) -> (a -> Delta b) -> (Delta b)
46b15f368905 Define bind and mu for Infinite Delta
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 58
diff changeset
43 bind (Mono x) f = f x
69
295e8ed39c0c Change headDelta definition. return non-delta value
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 59
diff changeset
44 bind (Delta x d) f = Delta (headDelta (f x)) (bind d (tailDelta . f))
59
46b15f368905 Define bind and mu for Infinite Delta
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 58
diff changeset
45
46b15f368905 Define bind and mu for Infinite Delta
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 58
diff changeset
46 mu :: (Delta (Delta a)) -> (Delta a)
46b15f368905 Define bind and mu for Infinite Delta
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 58
diff changeset
47 mu d = bind d id
46b15f368905 Define bind and mu for Infinite Delta
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 58
diff changeset
48
43
90b171e3a73e Rename to Delta from Similar
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 23
diff changeset
49 instance Monad Delta where
57
dfcd72dc697e ReDefine Delta used non-empty-list for infinite changes
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 53
diff changeset
50 return x = Mono x
59
46b15f368905 Define bind and mu for Infinite Delta
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 58
diff changeset
51 d >>= f = mu $ fmap f d
46b15f368905 Define bind and mu for Infinite Delta
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 58
diff changeset
52
58
1229ee398567 Mini fixes
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 57
diff changeset
53 -- utils
18
c77397d0677f Try define Similar as Monad
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
54
58
1229ee398567 Mini fixes
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 57
diff changeset
55 deltaFromList :: [a] -> Delta a
1229ee398567 Mini fixes
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 57
diff changeset
56 deltaFromList = (foldl1 deltaAppend) . (fmap return)