diff options
author | Adam Chlipala <adamc@hcoop.net> | 2009-10-25 11:03:42 -0400 |
---|---|---|
committer | Adam Chlipala <adamc@hcoop.net> | 2009-10-25 11:03:42 -0400 |
commit | 5e9435290876dcdfd3c66fb652257f4c3ed50697 (patch) | |
tree | e33effa1b155c3f40ceb8e3b1a80b937ae126547 /demo/more/dnat.ur | |
parent | e2ffafb9cfaf0bb921bc9bca491214cb464a38d7 (diff) |
Factor Dnat into separate module
Diffstat (limited to 'demo/more/dnat.ur')
-rw-r--r-- | demo/more/dnat.ur | 42 |
1 files changed, 42 insertions, 0 deletions
diff --git a/demo/more/dnat.ur b/demo/more/dnat.ur new file mode 100644 index 00000000..8d8095e7 --- /dev/null +++ b/demo/more/dnat.ur @@ -0,0 +1,42 @@ +datatype t' = O | S of source t' +type t = source t' + +val zero = source O + +fun inc n = + v <- get n; + case v of + O => + n' <- source O; + set n (S n') + | S n => inc n + +fun dec n = + let + fun dec' last n = + v <- get n; + case v of + O => (case last of + None => return () + | Some n' => set n' O) + | S n' => dec' (Some n) n' + in + dec' None n + end + +fun render [ctx] [inp] [[Body] ~ ctx] (xml : xml ([Body] ++ ctx) inp []) n = + let + fun render n = + n <- signal n; + return (render' n) + + and render' n = + case n of + O => <xml/> + | S n => <xml> + {xml} + <dyn signal={render n}/> + </xml> + in + <xml><dyn signal={render n}/></xml> + end |