]> gerrit.simantics Code Review - simantics/platform.git/blob - tests/org.simantics.scl.compiler.tests/src/org/simantics/scl/compiler/tests/scl/GraphPrelude.scl
Merge commit 'ffdf837'
[simantics/platform.git] / tests / org.simantics.scl.compiler.tests / src / org / simantics / scl / compiler / tests / scl / GraphPrelude.scl
1 \r
2 /**\r
3  * Databoard\r
4  */\r
5 data Binding // Private\r
6 class Serializable a where\r
7     getBinding :: Binding\r
8 \r
9 /**\r
10  * Reading graph\r
11  */\r
12 data Resource\r
13 data ReadGraph // Private\r
14 class ReadTransaction where\r
15     getGraph :: ReadGraph\r
16 \r
17 resource :: ReadTransaction => String -> Resource\r
18 (#) :: ReadTransaction => Resource -> Resource -> [Resource]\r
19 valueOf :: ReadTransaction => Serializable a => Resource -> a\r
20 \r
21 /**\r
22  * Writing graph\r
23  */\r
24 data WriteGraph // Private\r
25 data Graph a = Graph (WriteGraph -> a)\r
26 \r
27 instance Monad Graph where\r
28     return x = Graph (\_ -> x)\r
29     Graph g >>= f = \wg -> f (g wg) wg\r
30     map f (Graph g) = Graph (f . g)\r
31 \r
32 newResource :: Graph Resource\r
33 newResource = Graph __WriteGraph_newResource\r
34 newLiteral :: Serializable a => a -> Graph Resource\r
35 newLiteral = Graph (\wg -> \r
36     literal = __WriteGraph_newResource wg\r
37     _ = __WriteGraph_claimValue wg literal a getBinding\r
38     literal \r
39 )\r
40 statement :: Resource -> Resource -> Resource -> Graph ()\r
41 statement s p o = Graph (\wg -> __WriteGraph_claim wg s p o)