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