adamc@1015: datatype t' = O | S of source t'
adamc@1015: type t = source t'
adamc@1015:
adamc@1015: val zero = source O
adamc@1015:
adamc@1015: fun inc n =
adamc@1015: v <- get n;
adamc@1015: case v of
adamc@1015: O =>
adamc@1015: n' <- source O;
adamc@1015: set n (S n')
adamc@1015: | S n => inc n
adamc@1015:
adamc@1015: fun dec n =
adamc@1015: let
adamc@1015: fun dec' last n =
adamc@1015: v <- get n;
adamc@1015: case v of
adamc@1015: O => (case last of
adamc@1015: None => return ()
adamc@1015: | Some n' => set n' O)
adamc@1015: | S n' => dec' (Some n) n'
adamc@1015: in
adamc@1015: dec' None n
adamc@1015: end
adamc@1015:
adamc@1015: fun render [ctx] [inp] [[Body] ~ ctx] (xml : xml ([Body] ++ ctx) inp []) n =
adamc@1015: let
adamc@1015: fun render n =
adamc@1015: n <- signal n;
adamc@1015: return (render' n)
adamc@1015:
adamc@1015: and render' n =
adamc@1015: case n of
adamc@1015: O =>
adamc@1015: | S n =>
adamc@1015: {xml}
adamc@1015:
adamc@1015:
adamc@1015: in
adamc@1015:
adamc@1015: end