Mercurial > urweb
annotate demo/more/versioned.urs @ 1507:ca8c8b8cc477
Tutorial: TLC meets type classes and modules
author | Adam Chlipala <adam@chlipala.net> |
---|---|
date | Sun, 17 Jul 2011 13:04:07 -0400 |
parents | 166ea3944b91 |
children |
rev | line source |
---|---|
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 |