+++ /dev/null
-module genericMap\r
-\r
-/*\r
- Genric map definition for assignment 3 in AFP 2018\r
- Pieter Koopman, pieter@cs.ru.nl\r
- September 2018\r
- \r
- Use StdEnv or iTask environment.\r
-*/\r
-\r
-import StdEnv, StdGeneric\r
-import Data.GenEq\r
-\r
-generic gMap a b :: a -> b\r
-gMap{|c|} x = x\r
-gMap{|UNIT|} x = x\r
-gMap{|PAIR|} f g (PAIR x y) = PAIR (f x) (g y) \r
-gMap{|EITHER|} f g (LEFT x) = LEFT (f x)\r
-gMap{|EITHER|} f g (RIGHT x) = RIGHT (g x)\r
-gMap{|CONS|} f (CONS x) = CONS (f x)\r
-gMap{|OBJECT|} f (OBJECT x) = OBJECT (f x)\r
-\r
-:: Bin a = Leaf | Bin (Bin a) a (Bin a)\r
-t = Bin (Bin Leaf 1 Leaf) 2 (Bin (Bin Leaf 3 Leaf) 4 Leaf)\r
-l = [1..7]\r
-\r
-fac 0 = 1\r
-fac n = n * fac (dec n)\r
-\r
-derive gMap Bin, [], (,)\r
-\r
-Start =\r
- ( gMap{|*->*|} fac t\r
- , gMap{|*->*|} (\i->(i, fac i)) l\r
- , gMap{|*->*->*|} (gMap{|*->*|} fac) (gMap{|*->*|} fac) (l, t)\r
- , gEq{|*|} [1,2] [1,2]\r
- , gEq{|*|} [1,2] [2,3]\r
- , gEq{|*->*|} (<) [1,2] [2,3]\r
- )\r