[Haskell-cafe] "Graphical Haskell"
Claus Reinke
claus.reinke at talk21.com
Fri Jun 22 08:01:52 EDT 2007
> Since nobody gave an answer on this topic, I guess it is insane to do it in
> Haskell (at least for a newbie)? :)
not necessarily; we're all waiting for your first release?-)
> I would like to create a program that allows you to create such flow graphs,
> and then let GHC generate the code and do type inference.
spun off from dazzle, which you've found, there's also blobs:
http://www.cs.york.ac.uk/fp/darcs/Blobs/
> Now, instead of generating Haskell code (which I could do first, would be
> easier to debug), I would like to directly create an AST, and use an Haskell
> API to communicate with GHC.
one thing to consider: things get a little more tricky when the generated
haskell and dynamically loaded code is meant to do graphics (such as
updating the original diagram with the state of the simulation). in particular,
check that the gui framework actually works via that more circuituous route
(similar problems to running in ghci instead of ghc).
> I already found out that GHC indeed has such an API, but how possible is
> this idea? Has this been done before?
the ghc api is meant to support this kind of endeavours, and it isn't frozen
yet, either: the ghc team is happy to receive feedback about things that work
or things that could work better.
before the ghc api, before blobs (after dazzle, though;), i did an embedding
of haskell-coloured petri nets in haskell, with a very simplistic graphical
net editor on top of wxhaskell, which generated haskell code for the net,
then called ghci to type-check and run the resulting code with a copy of
the original net graphics to update during simulation (poor man's reflection:):
http://www.cs.kent.ac.uk/people/staff/cr3/HCPN/
it worked, but some things were annoying:
- no high-level support for writing graph editors in wxhaskell;
blobs aims to fix that
- awkward meta-programming and runtime reflection;
ghc api should help a lot (but i can't see anything wrong with
letting it work on generated source code first; optimization can
come latter)
- wxhaskell encourages low-level dependencies, at least when
you're writing your first wxhaskell programs, because it can
be rather difficult just to find the function you need, you're
tempted to use it right there, just to see if it works, and leave
cleaning up for later, which never comes;
gui frameworks are worse than the io monad; try to abstract
and limit your uses of gui lib features to as few modules as
possible; nicer code, easier to switch to different framework
- abi incompatibility!!^*L"$W&%*^"%*!
sorry,-) but that has become the deal breaker for me; it is
bad enough that there are two major haskell gui libs out
there, as it means that your clients may have the wrong one
or none at all, and need to install the one you need; but,
worse than that, whenever there's a new ghc release,
everybody needs to rebuild their gui libs, and if you
have the latest ghc release and a recent ghc head installed,
you even need separate copies of the gui lib, etc, etc.
so you use a nice high-level language to get a lot done
in very little very portable code, but instead of distributing
a few pages of haskell, with build as simple as ghc --make,
you have to worry about rather huge gui lib installations,
and you have to worry anew for each ghc release..
btw, i am thinking about reviving my hcpn project, to make
use of the ghc api, but i'd like to get rid of the binary gui lib
dependency first. my current take on this is "gui lib? no,
thanks, i'm just browsing", if you know what i mean?-)
hth,
claus
More information about the Haskell-Cafe
mailing list