adamc@1022
|
1 signature INPUT = sig
|
adamc@1022
|
2 con paper :: {(Type * Type)}
|
adamc@1022
|
3 constraint [Id, Document] ~ paper
|
adamc@1022
|
4
|
adamc@1022
|
5 type userId
|
adamc@1022
|
6 val userId_inj : sql_injectable_prim userId
|
adamc@1022
|
7 table user : {Id : userId, Nam : string, Password : string, Chair : bool, OnPc : bool}
|
adamc@1022
|
8 PRIMARY KEY Id,
|
adamc@1022
|
9 CONSTRAINT Nam UNIQUE Nam
|
adamc@1022
|
10
|
adamc@1022
|
11 type paperId
|
adamc@1022
|
12 val paperId_inj : sql_injectable_prim paperId
|
adamc@1022
|
13 table paper : ([Id = paperId, Document = blob] ++ map fst paper)
|
adamc@1022
|
14 PRIMARY KEY Id
|
adamc@1022
|
15
|
adamc@1022
|
16 val checkLogin : transaction (option {Id : userId, Nam : string, Chair : bool, OnPc : bool})
|
adamc@1022
|
17 val getLogin : transaction {Id : userId, Nam : string, Chair : bool, OnPc : bool}
|
adamc@1022
|
18 end
|
adamc@1022
|
19
|
adamc@1022
|
20 signature OUTPUT = sig
|
adamc@1022
|
21 type userId
|
adamc@1022
|
22 type paperId
|
adamc@1022
|
23
|
adamc@1022
|
24 val linksForPc : xbody
|
adamc@1022
|
25
|
adamc@1022
|
26 con yourPaperTables :: {{Type}}
|
adamc@1022
|
27 constraint [Paper] ~ yourPaperTables
|
adamc@1022
|
28 val joinYourPaper : tabs ::: {{Type}} -> paper ::: {Type}
|
adamc@1022
|
29 -> [[Paper] ~ tabs] => [[Paper] ~ yourPaperTables] => [tabs ~ yourPaperTables] => [[Id] ~ paper] =>
|
adamc@1022
|
30 sql_from_items ([Paper = [Id = paperId] ++ paper] ++ tabs)
|
adamc@1022
|
31 -> sql_from_items (yourPaperTables ++ [Paper = [Id = paperId] ++ paper] ++ tabs)
|
adamc@1022
|
32 end
|
adamc@1022
|
33
|
adamc@1001
|
34 functor Make(M : sig
|
adamc@1003
|
35 con paper :: {(Type * Type)}
|
adamc@1010
|
36 constraint [Id, Document, Authors] ~ paper
|
adamc@1004
|
37 val paper : $(map Meta.meta paper)
|
adamc@1007
|
38 val paperFolder : folder paper
|
adamc@1003
|
39
|
adamc@1001
|
40 con review :: {(Type * Type)}
|
adamc@1003
|
41 constraint [Paper, User] ~ review
|
adamc@1004
|
42 val review : $(map Meta.meta review)
|
adamc@1011
|
43 val reviewFolder : folder review
|
adamc@1006
|
44
|
adamc@1006
|
45 val submissionDeadline : time
|
adamc@1009
|
46 val summarizePaper : $(map fst paper) -> xbody
|
adamc@1022
|
47
|
adamc@1022
|
48 functor Make (M : INPUT where con paper = paper)
|
adamc@1022
|
49 : OUTPUT where con userId = M.userId
|
adamc@1022
|
50 where con paperId = M.paperId
|
adamc@1001
|
51 end) : sig
|
adamc@1001
|
52
|
adamc@1001
|
53 val main : unit -> transaction page
|
adamc@1001
|
54
|
adamc@1001
|
55 end
|