summaryrefslogtreecommitdiff
path: root/demo/more/conference.urs
diff options
context:
space:
mode:
Diffstat (limited to 'demo/more/conference.urs')
-rw-r--r--demo/more/conference.urs37
1 files changed, 37 insertions, 0 deletions
diff --git a/demo/more/conference.urs b/demo/more/conference.urs
index 53fd478d..226e9768 100644
--- a/demo/more/conference.urs
+++ b/demo/more/conference.urs
@@ -1,3 +1,36 @@
+signature INPUT = sig
+ con paper :: {(Type * Type)}
+ constraint [Id, Document] ~ paper
+
+ type userId
+ val userId_inj : sql_injectable_prim userId
+ table user : {Id : userId, Nam : string, Password : string, Chair : bool, OnPc : bool}
+ PRIMARY KEY Id,
+ CONSTRAINT Nam UNIQUE Nam
+
+ type paperId
+ val paperId_inj : sql_injectable_prim paperId
+ table paper : ([Id = paperId, Document = blob] ++ map fst paper)
+ PRIMARY KEY Id
+
+ val checkLogin : transaction (option {Id : userId, Nam : string, Chair : bool, OnPc : bool})
+ val getLogin : transaction {Id : userId, Nam : string, Chair : bool, OnPc : bool}
+end
+
+signature OUTPUT = sig
+ type userId
+ type paperId
+
+ val linksForPc : xbody
+
+ con yourPaperTables :: {{Type}}
+ constraint [Paper] ~ yourPaperTables
+ val joinYourPaper : tabs ::: {{Type}} -> paper ::: {Type}
+ -> [[Paper] ~ tabs] => [[Paper] ~ yourPaperTables] => [tabs ~ yourPaperTables] => [[Id] ~ paper] =>
+ sql_from_items ([Paper = [Id = paperId] ++ paper] ++ tabs)
+ -> sql_from_items (yourPaperTables ++ [Paper = [Id = paperId] ++ paper] ++ tabs)
+end
+
functor Make(M : sig
con paper :: {(Type * Type)}
constraint [Id, Document, Authors] ~ paper
@@ -11,6 +44,10 @@ functor Make(M : sig
val submissionDeadline : time
val summarizePaper : $(map fst paper) -> xbody
+
+ functor Make (M : INPUT where con paper = paper)
+ : OUTPUT where con userId = M.userId
+ where con paperId = M.paperId
end) : sig
val main : unit -> transaction page