adamc@993
|
1 functor Make(M : sig
|
adamc@993
|
2 con key :: {Type}
|
adamc@993
|
3 con data :: {Type}
|
adamc@993
|
4 constraint key ~ data
|
adamc@995
|
5 constraint [When, Version] ~ (key ++ data)
|
adamc@993
|
6
|
adamc@993
|
7 val key : $(map sql_injectable key)
|
adamc@993
|
8 val data : $(map (fn t => {Inj : sql_injectable_prim t,
|
adamc@993
|
9 Eq : eq t}) data)
|
adamc@993
|
10
|
adamc@993
|
11 val keyFolder : folder key
|
adamc@993
|
12 val dataFolder : folder data
|
adamc@993
|
13 end) : sig
|
adamc@993
|
14 val insert : $(M.key ++ M.data) -> transaction unit
|
adamc@993
|
15 val update : $(M.key ++ M.data) -> transaction unit
|
adamc@993
|
16
|
adamc@993
|
17 val keys : transaction (list $M.key)
|
adamc@993
|
18 val current : $M.key -> transaction (option $M.data)
|
adamc@995
|
19
|
adamc@995
|
20 type version
|
adamc@995
|
21 val keysAt : version -> transaction (list $M.key)
|
adamc@995
|
22 val archive : version -> $M.key -> transaction (option $M.data)
|
adamc@995
|
23 val updateTimes : transaction (list (version * time))
|
adamc@993
|
24 end
|