You seem to have the right idea: you can indeed implement your own library
of "rpc forms". Try filling in this signature (that is, .urs file):
con rpcForm : {Type} -> Type
val create : fields ::: {Type} -> $fields -> transaction (rpcForm fields)
val textbox :
others ::: {Type} -> nm :: Name -> [[nm] ~ others] =>
rpcForm ([nm = string] ++ others) -> xbody
val submit :
fields ::: {Type} -> result ::: Type ->
rpcForm fields -> ($fields -> transaction result) -> transaction result
Here's an example usage:
val handle : {Name : string, FavColor : string} -> transaction unit =
(* something with rpc... *)
val formExample : transaction page =
fm <- create {Nm = "", FavColor = ""};
return <xml>
Your name: {textbox [Nm] fm}<br/>
Your favorite color: {textbox [FavColor] fm}<br/>
<button onclick={fn _ => submit fm handle}>Submit</button>
</xml>
And here's a start to the implementation (that is, .ur file):
con rpcForm fields =
$(map (fn t => {Source : source t, Default : t}) fields)
Once you have this working, you probably want to implement analogues of
textbox for other types. To be clear, I just came up with this off the top
of my head, so you will probably have to change some things.
Good luck!
Ziv
Post by Aistis RaulinaitisWell I'm hoping to be able find some kind of happy middle between spurious
reloads and verbosity of form definition.
I'm fine with implementing a few abstractions myself, I'm just not sure
what the correct direction is.
Your widget system based on ML modules and functors is very interesting
I'm just wondering how it would be possible to achieve what I'm attempting
to do with as little friction as possible.
Post by Adam ChlipalaMaybe just stop worrying about it, so that you might find that problems
don't arise in practice? >:)
Any pointers to get me started on the right path when it comes to a more
effective usage of source based forms?
I'm not sure what to suggest. No, there is no existing feature like
what you suggest. I have found it quite pleasant to work with sources and
widgets connected to them.
The way that a form will pack all of its contents into a stuct is a
clear advantage over the source based route. It requires defining possibly
many sources and wiring them all into the right slots, having to call "get"
on each one of them in the onclick handler and then wire all the gotten
values into the handler.
_______________________________________________
Ur mailing list
http://www.impredicative.com/cgi-bin/mailman/listinfo/ur
_______________________________________________
Ur mailing list
http://www.impredicative.com/cgi-bin/mailman/listinfo/ur