diff options
Diffstat (limited to 'assignment-3/genericMap.icl')
-rw-r--r-- | assignment-3/genericMap.icl | 20 |
1 files changed, 20 insertions, 0 deletions
diff --git a/assignment-3/genericMap.icl b/assignment-3/genericMap.icl new file mode 100644 index 0000000..8d24d96 --- /dev/null +++ b/assignment-3/genericMap.icl @@ -0,0 +1,20 @@ +module genericMap
+
+import StdEnv, StdGeneric
+
+generic gMap a b :: a -> b
+gMap{|Int|} x = x
+gMap{|Real|} x = x
+gMap{|UNIT|} x = x
+gMap{|PAIR|} f g (PAIR x y) = PAIR (f x) (g y)
+gMap{|EITHER|} f g (LEFT x) = LEFT (f x)
+gMap{|EITHER|} f g (RIGHT x) = RIGHT (g x)
+gMap{|CONS|} f (CONS x) = CONS (f x)
+gMap{|OBJECT|} f (OBJECT x) = OBJECT (f x)
+
+:: Bin a = Leaf | Bin (Bin a) a (Bin a)
+t = Bin (Bin Leaf 1 Leaf) 2 (Bin (Bin Leaf 3 Leaf) 4 Leaf)
+l = [1..7]
+
+Start = (l, t)
+
|