07e1be5cf156e29d72d691a63e9fd43f9380357f
[tt2015.git] / a3 / code / Generics / GenPrint.dcl
1 definition module GenPrint
2
3 import StdGeneric
4
5 class PrintOutput s where
6 printOutput :: Char *s -> *s
7
8 :: *StringOutput
9
10 :: PrintState s
11
12 mkPrintState :: *s -> PrintState *s | PrintOutput s
13 mkStringPrintState :: PrintState StringOutput
14 printToString :: a -> String | gPrint{|*|} a
15
16 (<<-) infixl 0 :: (PrintState *s) a -> *(PrintState *s)
17 | gPrint{|*|} a & PrintOutput s
18
19
20 instance PrintOutput StringOutput
21 instance PrintOutput File
22
23 generic gPrint a :: a (PrintState *s) -> (PrintState *s) | PrintOutput s
24
25 derive gPrint Int, Real, Char, Bool, String, UNIT, PAIR, EITHER, FIELD, CONS, OBJECT, [], {!}, {}
26 //derive bimap PrintState
27