annotate demo/noisy.ur @ 677:81573f62d6c3

Enforce termination of type class instances
author Adam Chlipala <adamc@hcoop.net>
date Thu, 26 Mar 2009 15:54:04 -0400
parents bab524996fca
children 1a317a707d71
rev   line source
adamc@651 1 datatype list t = Nil | Cons of t * list t
adamc@651 2
adamc@651 3 table t : { Id : int, A : string }
adamc@651 4
adamc@651 5 fun add id s =
adamc@651 6 dml (INSERT INTO t (Id, A) VALUES ({[id]}, {[s]}))
adamc@651 7
adamc@651 8 fun del id =
adamc@651 9 dml (DELETE FROM t WHERE t.Id = {[id]})
adamc@651 10
adamc@651 11 fun lookup id =
adamc@651 12 ro <- oneOrNoRows (SELECT t.A FROM t WHERE t.Id = {[id]});
adamc@651 13 case ro of
adamc@651 14 None => return None
adamc@651 15 | Some r => return (Some r.T.A)
adamc@651 16
adamc@651 17 fun check ls =
adamc@651 18 case ls of
adamc@651 19 Nil => return ()
adamc@651 20 | Cons (id, ls') =>
adamc@651 21 ao <- lookup id;
adamc@651 22 alert (case ao of
adamc@651 23 None => "Nada"
adamc@651 24 | Some a => a);
adamc@651 25 check ls'
adamc@651 26
adamc@651 27 fun main () =
adamc@651 28 idAdd <- source "";
adamc@651 29 aAdd <- source "";
adamc@651 30
adamc@651 31 idDel <- source "";
adamc@651 32
adamc@651 33 return <xml><body>
adamc@651 34 <button value="Check values of 1, 2, and 3" onclick={check (Cons (1, Cons (2, Cons (3, Nil))))}/><br/>
adamc@651 35 <br/>
adamc@651 36 <button value="Add" onclick={id <- get idAdd; a <- get aAdd; add (readError id) a}/>
adamc@651 37 <ctextbox source={idAdd}/>
adamc@651 38 <ctextbox source={aAdd}/><br/>
adamc@651 39 <br/>
adamc@651 40 <button value="Delete" onclick={id <- get idDel; del (readError id)}/>
adamc@651 41 <ctextbox source={idDel}/>
adamc@651 42 </body></xml>