]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.scl.compiler/tests/org/simantics/scl/compiler/tests/scl/GraphPrelude.scl
Migrated source code from Simantics SVN
[simantics/platform.git] / bundles / org.simantics.scl.compiler / tests / org / simantics / scl / compiler / tests / scl / GraphPrelude.scl
diff --git a/bundles/org.simantics.scl.compiler/tests/org/simantics/scl/compiler/tests/scl/GraphPrelude.scl b/bundles/org.simantics.scl.compiler/tests/org/simantics/scl/compiler/tests/scl/GraphPrelude.scl
new file mode 100644 (file)
index 0000000..ddb2d58
--- /dev/null
@@ -0,0 +1,41 @@
+\r
+/**\r
+ * Databoard\r
+ */\r
+data Binding // Private\r
+class Serializable a where\r
+    getBinding :: Binding\r
+\r
+/**\r
+ * Reading graph\r
+ */\r
+data Resource\r
+data ReadGraph // Private\r
+class ReadTransaction where\r
+    getGraph :: ReadGraph\r
+\r
+resource :: ReadTransaction => String -> Resource\r
+(#) :: ReadTransaction => Resource -> Resource -> [Resource]\r
+valueOf :: ReadTransaction => Serializable a => Resource -> a\r
+\r
+/**\r
+ * Writing graph\r
+ */\r
+data WriteGraph // Private\r
+data Graph a = Graph (WriteGraph -> a)\r
+\r
+instance Monad Graph where\r
+    return x = Graph (\_ -> x)\r
+    Graph g >>= f = \wg -> f (g wg) wg\r
+    map f (Graph g) = Graph (f . g)\r
+\r
+newResource :: Graph Resource\r
+newResource = Graph __WriteGraph_newResource\r
+newLiteral :: Serializable a => a -> Graph Resource\r
+newLiteral = Graph (\wg -> \r
+    literal = __WriteGraph_newResource wg\r
+    _ = __WriteGraph_claimValue wg literal a getBinding\r
+    literal \r
+)\r
+statement :: Resource -> Resource -> Resource -> Graph ()\r
+statement s p o = Graph (\wg -> __WriteGraph_claim wg s p o)
\ No newline at end of file