comparison agda/delta.agda @ 94:bcd4fe52a504

Rewrite monad definitions for delta/deltaM
author Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
date Mon, 19 Jan 2015 17:10:29 +0900
parents 55d11ce7e223
children dfe8c67390bd
comparison
equal deleted inserted replaced
93:8d92ed54a94f 94:bcd4fe52a504
37 delta-fmap f (delta x d) = delta (f x) (delta-fmap f d) 37 delta-fmap f (delta x d) = delta (f x) (delta-fmap f d)
38 38
39 39
40 40
41 -- Monad (Category) 41 -- Monad (Category)
42 eta : {l : Level} {A : Set l} -> A -> Delta A 42 delta-eta : {l : Level} {A : Set l} -> A -> Delta A
43 eta x = mono x 43 delta-eta x = mono x
44 44
45 bind : {l : Level} {A B : Set l} -> (Delta A) -> (A -> Delta B) -> Delta B 45 delta-bind : {l : Level} {A B : Set l} -> (Delta A) -> (A -> Delta B) -> Delta B
46 bind (mono x) f = f x 46 delta-bind (mono x) f = f x
47 bind (delta x d) f = delta (headDelta (f x)) (bind d (tailDelta ∙ f)) 47 delta-bind (delta x d) f = delta (headDelta (f x)) (delta-bind d (tailDelta ∙ f))
48 48
49 mu : {l : Level} {A : Set l} -> Delta (Delta A) -> Delta A 49 delta-mu : {l : Level} {A : Set l} -> Delta (Delta A) -> Delta A
50 mu d = bind d id 50 delta-mu d = delta-bind d id
51 51
52 returnS : {l : Level} {A : Set l} -> A -> Delta A
53 returnS x = mono x
54
55 returnSS : {l : Level} {A : Set l} -> A -> A -> Delta A
56 returnSS x y = deltaAppend (returnS x) (returnS y)
57 52
58 53
59 -- Monad (Haskell) 54 -- Monad (Haskell)
60 return : {l : Level} {A : Set l} -> A -> Delta A 55 delta-return : {l : Level} {A : Set l} -> A -> Delta A
61 return = eta 56 delta-return = delta-eta
62 57
63 _>>=_ : {l : Level} {A B : Set l} -> 58 _>>=_ : {l : Level} {A B : Set l} ->
64 (x : Delta A) -> (f : A -> (Delta B)) -> (Delta B) 59 (x : Delta A) -> (f : A -> (Delta B)) -> (Delta B)
65 (mono x) >>= f = f x 60 (mono x) >>= f = f x
66 (delta x d) >>= f = delta (headDelta (f x)) (d >>= (tailDelta ∙ f)) 61 (delta x d) >>= f = delta (headDelta (f x)) (d >>= (tailDelta ∙ f))
67 62
68 63
69 64
70 -- proofs 65 -- proofs