view demo/metaform.ur @ 805:e2780d2f4afc

Mutual datatypes through Elaborate
author Adam Chlipala <adamc@hcoop.net>
date Sat, 16 May 2009 15:14:17 -0400
parents aa2290c32ce2
children 669ac5e9a69e
line wrap: on
line source
functor Make (M : sig
                  con fs :: {Unit}
                  val fl : folder fs
                  val names : $(mapU string fs)
              end) = struct

    fun handler values = return <xml><body>
      {foldURX2 [string] [string] [body]
       (fn (nm :: Name) (rest :: {Unit}) [[nm] ~ rest] name value => <xml>
         <li> {[name]} = {[value]}</li>
       </xml>)
       [M.fs] M.fl M.names values}
    </body></xml>

    fun main () = return <xml><body>
      <form>
        {foldUR [string] [fn cols :: {Unit} => xml form [] (mapU string cols)]
                (fn (nm :: Name) (rest :: {Unit}) [[nm] ~ rest] name
                                 (acc : xml form [] (mapU string rest)) => <xml>
                                   <li> {[name]}: <textbox{nm}/></li>
                                   {useMore acc}
                                 </xml>)
                <xml/>
                [M.fs] M.fl M.names}
        <submit action={handler}/>
      </form>
    </body></xml>

end