Thanks for the nice example!
I think the mouse/key event handler changes I announced yesterday might
make some (but definitely not all) of your FFI work redundant.
Why does jsMove.urs include type definitions?
I notice many redundant parentheses in jsMove.ur, which is
understandable for someone new to ML-style syntax (if you are?), but
which still confuses me, since I assume parens are there for a reason. ;)
You define a function [showXY] that would be an excellent candidate for
a [show] type class instance, so that you could afterward call merely
[show] instead of [showXY].
There is a [source] holding a [string] that gives instructions for the
user. Currently, an 'onload' handler computes this string imperatively
and stores it in the [source]. A more idiomatic Ur/Web approach would
be to code the instructions part of the page as a <dyn> that refers
directly to the underlying data sources (in this case, [mouseOn] and
[clickToMove]). This also saves you some code duplication, as currently
you recompute the instructions in the same way in multiple locations.
Clearly it is worth defining a function for the pattern [x <- signal x;
return <xml>{[x]}</xml>], in some common library. :-)
You use the constructor [Cons] directly in one place. I prefer the
infix operator [::] for that.
Timothy Beyer wrote:
I recently implemented a simple Ur/Web application "jsMove" which draws a
circle to the screen. The circle may be moved interactively via keyboard/mouse
or touchscreen, depending on the selected URL (main or main_touch). It uses
the Ur/Web JavaScript FFI extensively for graphics (Raphaƫl) and for several
additional event handlers.
It is mainly targeted towards people who are completely new to Ur/Web and don't
understand how to use the JavaScript FFI very well, or people who want to write
non-traditional web applications (eg. games, desktop style applications) in a
browser.
Keep in mind that the code is ugly because I haven't mastered the type system
yet, so any critiques are welcome. There are also currently some issues with
pressing the buttons with the mouse, but for the most part the code works very
well and could likely be useful to others.
The complete source code is available:
http://chiselapp.com/user/beyert/repository/urweb_examples/urweb_examples
_______________________________________________
Ur mailing list
[email protected]
http://www.impredicative.com/cgi-bin/mailman/listinfo/ur