Mercurial > hg > Members > atton > delta_monad
comparison similar.hs @ 20:d4aa70d94352
Define Similar as Applicative
author | Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp> |
---|---|
date | Tue, 23 Sep 2014 10:38:53 +0900 |
parents | 003b6e58d815 |
children | af8754322ed4 |
comparison
equal
deleted
inserted
replaced
19:003b6e58d815 | 20:d4aa70d94352 |
---|---|
11 s == ss = (value s) == (value ss) | 11 s == ss = (value s) == (value ss) |
12 | 12 |
13 instance Functor Similar where | 13 instance Functor Similar where |
14 fmap f (Single xs x) = Single xs (f x) | 14 fmap f (Single xs x) = Single xs (f x) |
15 fmap f (Similar xs x ys y) = Similar xs (f x) ys (f y) | 15 fmap f (Similar xs x ys y) = Similar xs (f x) ys (f y) |
16 | |
17 instance Applicative Similar where | |
18 pure = Single [] | |
19 (Single lf f) <*> (Single lx x) = Single (lf ++ lx) (f x) | |
20 (Single lf f) <*> (Similar lx x ly y) = Similar (lf ++ lx) (f x) (lf ++ ly) (f y) | |
21 (Similar lf f lg g) <*> (Single lx x) = Similar (lf ++ lx) (f x) (lg ++ lx) (g x) | |
22 (Similar lf f lg g) <*> (Similar lx x ly y) = Similar (lf ++ lx) (f x) (lg ++ ly) (g y) | |
23 | |
24 | |
16 | 25 |
17 mu :: Similar (Similar a) -> Similar a | 26 mu :: Similar (Similar a) -> Similar a |
18 mu (Single ls (Single lx x)) = Single (ls ++ lx) x | 27 mu (Single ls (Single lx x)) = Single (ls ++ lx) x |
19 mu (Single ls (Similar lx x ly y)) = Similar (ls ++ lx) x (ls ++ ly) y | 28 mu (Single ls (Similar lx x ly y)) = Similar (ls ++ lx) x (ls ++ ly) y |
20 mu (Similar lx (Single llx x) ly (Single lly y)) = Similar (lx ++ llx) x (ly ++ lly) y | 29 mu (Similar lx (Single llx x) ly (Single lly y)) = Similar (lx ++ llx) x (ly ++ lly) y |