reset a3, kut Charlie ;)
[tt2015.git] / a3 / code / Generics / GenFMap.dcl
diff --git a/a3/code/Generics/GenFMap.dcl b/a3/code/Generics/GenFMap.dcl
new file mode 100644 (file)
index 0000000..66219aa
--- /dev/null
@@ -0,0 +1,19 @@
+definition module GenFMap\r
+\r
+import StdGeneric, StdMaybe\r
+\r
+:: FMap v\r
+derive bimap FMap\r
+\r
+emptyFMap :: .FMap .v\r
+\r
+generic gLookupFMap key :: key (FMap value) -> FMap value\r
+derive gLookupFMap UNIT, PAIR, EITHER, CONS, FIELD, OBJECT, Char, Int, Bool, Real, String, [], {}, {!}\r
+derive gLookupFMap (,), (,,), (,,,), (,,,,), (,,,,,), (,,,,,,), (,,,,,,,)\r
+\r
+generic gInsertFMap key :: key (FMap value, FMap value) -> (FMap value, FMap value)\r
+derive gInsertFMap UNIT, PAIR, EITHER, CONS, FIELD, OBJECT, Char, Int, Bool, Real, String, [], {}, {!}\r
+derive gInsertFMap (,), (,,), (,,,), (,,,,), (,,,,,), (,,,,,,), (,,,,,,,)\r
+\r
+lookupFMap :: !k .(FMap v) -> .(Maybe v) | gLookupFMap{|*|} k & bimap{|*|} v\r
+(<<=) infixl 1 :: .(FMap v) !.(k,v) -> FMap v | gInsertFMap{|*|} k & bimap{|*|} v\r