stab at some chapters
[phd-thesis.git] / lst / generic_print.icl
1 module generic_print
2 import StdEnv, StdGeneric
3
4 generic gPrint a :: a [String] -> [String]
5
6 gPrint{|Int|} x acc = [toString x:acc]
7 gPrint{|Bool|} x acc = [toString x:acc]
8 gPrint{|Real|} x acc = [toString x:acc]
9 gPrint{|Char|} x acc = [toString x:acc]
10 gPrint{|UNIT|} x acc = acc
11 gPrint{|OBJECT|} f (OBJECT x) acc = f x acc
12 gPrint{|CONS of gcd|} f (CONS x) acc = ["(",gcd.gcd_name, " ":f x [")":acc]]
13 gPrint{|RECORD of grd|} f (RECORD x) acc = ["{":f x ["}":acc]]
14 gPrint{|FIELD of gfd|} f (FIELD x) acc = [gfd.gfd_name, "=":f x acc]
15 gPrint{|PAIR|} fl fr (PAIR l r) acc = fl l [" ":fr r acc]
16 gPrint{|EITHER|} fl _ (LEFT x) acc = fl x acc
17 gPrint{|EITHER|} _ fr (RIGHT x) acc = fr x acc
18
19 :: T = {f1 :: Int, f2 :: (Real, [?Int])}
20 derive gPrint (,), [], ?, T
21
22 Start = gPrint{|*|} {f1=42, f2=(3.14, [?None])} []
23 // {f1=42 f2=(_Tuple2 3.14 (_Cons (_!None ) (_Nil )))}