--- /dev/null
+definition module GenPrint\r
+\r
+import StdGeneric\r
+\r
+class PrintOutput s where\r
+ printOutput :: Char *s -> *s\r
+ \r
+:: *StringOutput\r
+\r
+:: PrintState s\r
+\r
+mkPrintState :: *s -> PrintState *s | PrintOutput s\r
+mkStringPrintState :: PrintState StringOutput\r
+printToString :: a -> String | gPrint{|*|} a\r
+\r
+(<<-) infixl 0 :: (PrintState *s) a -> *(PrintState *s) \r
+ | gPrint{|*|} a & PrintOutput s\r
+\r
+\r
+instance PrintOutput StringOutput \r
+instance PrintOutput File\r
+\r
+generic gPrint a :: a (PrintState *s) -> (PrintState *s) | PrintOutput s\r
+\r
+derive gPrint Int, Real, Char, Bool, String, UNIT, PAIR, EITHER, FIELD, CONS, OBJECT, [], {!}, {}\r
+//derive bimap PrintState\r
+\r