annotate demo/listFun.ur @ 1446:36f7d1debb37

Each context gets its own non-repeating sequence of source numbers
author Adam Chlipala <adam@chlipala.net>
date Sat, 09 Apr 2011 14:36:47 -0400
parents 7ef4b2911b09
children
rev   line source
adamc@398 1 open List
adamc@398 2
adamc@386 3 functor Make(M : sig
adamc@386 4 type t
adamc@398 5 val toString : t -> string
adamc@398 6 val fromString : string -> option t
adamc@386 7 end) = struct
adamc@398 8 fun toXml (ls : list M.t) =
adamc@398 9 case ls of
adamc@398 10 Nil => <xml>[]</xml>
adamc@398 11 | Cons (x, ls') => <xml>{[M.toString x]} :: {toXml ls'}</xml>
adamc@398 12
adamc@501 13 fun console (ls : list M.t) =
adamc@501 14 let
adamc@501 15 fun cons (r : {X : string}) =
adamc@501 16 case M.fromString r.X of
adamc@501 17 None => return <xml><body>Invalid string!</body></xml>
adamc@501 18 | Some v => console (Cons (v, ls))
adamc@501 19 in
adamc@501 20 return <xml><body>
adamc@501 21 Current list: {toXml ls}<br/>
adamc@501 22 Reversed list: {toXml (rev ls)}<br/>
adamc@501 23 Length: {[length ls]}<br/>
adamc@501 24 <br/>
adamc@398 25
adamc@501 26 <form>
adamc@501 27 Add element: <textbox{#X}/> <submit action={cons}/>
adamc@501 28 </form>
adamc@501 29 </body></xml>
adamc@501 30 end
adamc@398 31
adamc@398 32 fun main () = console Nil
adamc@386 33 end