split up more and updatE
[phd-thesis.git] / appx / 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{|PAIR|} fl fr (PAIR l r) acc = fl l [" ":fr r acc]
12 gPrint{|EITHER|} fl _ (LEFT x) acc = fl x acc
13 gPrint{|EITHER|} _ fr (RIGHT x) acc = fr x acc
14
15 gPrint{|OBJECT|} f (OBJECT x) acc = f x acc
16 gPrint{|CONS of gcd|} f (CONS x) acc
17 = ["(", gcd.gcd_name, " ":f x [")":acc]]
18 gPrint{|RECORD of grd|} f (RECORD x) acc
19 = ["{", grd.grd_name, " | ":f x ["}":acc]]
20 gPrint{|FIELD of gfd|} f (FIELD x) acc
21 = [pre, gfd.gfd_name, "=":f x acc]
22 where pre = if (gfd.gfd_index == 0) "" ", "
23
24 :: T = {f1 :: Int, f2 :: (Real, [?Int])}
25 derive gPrint (,), [], ?, T
26
27 Start = gPrint{|*|} {f1=42, f2=(3.14, [?None])} []
28 // {T | f1=42 , f2=(_Tuple2 3.14 (_Cons (_!None ) (_Nil )))}