ef13640fb301205fcde369893604d3cd18bccf10
[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 = ["(", gcd.gcd_name, " ":f x [")":acc]]
17 gPrint{|RECORD of grd|} f (RECORD x) acc = ["{", grd.grd_name, " | ":f x ["}":acc]]
18 gPrint{|FIELD of gfd|} f (FIELD x) acc = [pre, gfd.gfd_name, "=":f x acc]
19 where
20 pre = if (gfd.gfd_index == 0) "" ", "
21
22 :: T = {f1 :: Int, f2 :: (Real, [?Int])}
23 derive gPrint (,), [], ?, T
24
25 Start = gPrint{|*|} {f1=42, f2=(3.14, [?None])} []
26 // {T | f1=42 , f2=(_Tuple2 3.14 (_Cons (_!None ) (_Nil )))}