[Haskell-cafe] gui libs? no thanks, i'm just browsing.. ;-)

Claus Reinke claus.reinke at talk21.com
Wed Jul 18 19:12:12 EDT 2007


gui libs are wonderful, but haskell sometimes has too few 
and sometimes has too many. and those we have do not 
work with every haskell implementation. and when they do
work (usually with ghc, these days), they need to be rebuilt
whenever ghc is updated, even if the gui lib hasn't changed
at all (one gui lib binding per ghc version). still, we put up 
with that when we need all those gui lib features, because 
we have to, and we're happy to live in one of those periods
when there are such bindings to full-featured gui libraries.

but what about quick and dirty/cheap and cheerful graphics?
over the years, HGL/SOEGraphics has served as a persistent 
reminder that things keep changing, and that when they do, 
something breaks. even if all people want to do is draw some
simple graphics, or animations.

i don't have a solution, but i'd like to throw another alternative
into the ring, based on the ongoing fight between web browsers
and other guis for world dominance..

the idea is well known: build your app as a server, and put
an ajax-based gui in front of it, even if server and browser
run on the same machine.

attached is a silly quick&dirty demo of some of the relevant concepts,
including a fake haskell http-server, an html/canvas/httprequest/
javascript-based gui, and some simple graphics/buttons/text. 

tested on windows, with opera 9.01 and ghc 6.6.1. it will probably 
not work with other browsers, but it should work with opera on 
other platforms, or with other haskell implementations supporting 
Network. (you might have to hardcode the file name at the top of 
the source if not using ghc; to make it work with other browsers, 
you need workarounds for standard browser incompatibilities)

to run, load Canvas.hs into ghci and call main. then start up opera, 
and visit 'http://localhost:8000/start' (to change that port number, 
change both 'main' in the haskell source, and 'get' in the html 
source). that should yield an html page with further instructions.

have a look, and please let me know if it works on your os/
haskell implementation, and what you think about the idea.

i won't do it myself, but perhaps someone could code up 
SOEGraphics based on this?-) and if not, this might still help
out some of you who need simple low-overhead guis (things
can get hairy very quickly if you need more than simple guis)?
 
some of you might have to fight through implementing browser-
based guis for their day jobs anyhow, but may want to put haskell 
behind those guis; or you might find haskell prototyping an easier
sell, if the gui can be reused for the "real" implementation..

claus

further reading/download:

Opera browser (windows, macos, solaris, linux, ..)
http://www.opera.com/download/

html 5 -- working draft, june 2007 (3.14.11 canvas element)
http://www.whatwg.org/specs/web-apps/current-work/#the-canvas

canvas tutorial
http://developer.mozilla.org/en/docs/Canvas_tutorial
http://developer.mozilla.org/en/docs/Drawing_Graphics_with_Canvas

-------------- next part --------------
A non-text attachment was scrubbed...
Name: Canvas.hs
Type: application/octet-stream
Size: 8707 bytes
Desc: not available
Url : http://www.haskell.org/pipermail/haskell-cafe/attachments/20070719/db6f281b/Canvas.obj


More information about the Haskell-Cafe mailing list