reset a3, kut Charlie ;)
[tt2015.git] / a3 / code / Generics / GenPrint.dcl
diff --git a/a3/code/Generics/GenPrint.dcl b/a3/code/Generics/GenPrint.dcl
new file mode 100644 (file)
index 0000000..07e1be5
--- /dev/null
@@ -0,0 +1,27 @@
+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