Ashley Yakeley wrote:

Would it be worth rewriting Fudgets to take advantage of such recent advances in Haskell as monadic IO?

A rejuvenation of Fudgets, taking advantage of things like subtyping, multi-parameter classes with functional dependencies, syntactic sugar for arrows, making room for monadic IO, and using a more modern graphics subsystem, would probably make Fudgets much more interesting. Actually, Fruit [1], although it is independent work, could be seen as a redesign/rejuvenation of Fudgets.


Allowing arbitrary monadic IO inside fudgets is not impossible, see [2], but while it would give access to modern things like the FFI, it would also mean giving up some of the purity and elegance of fudgets. The old approach to IO, where every IO operation is a constructor in a data type, means that all IO operations can be examined and manipulated within the program in interesting ways, by just adding a wrapper around the main function. For example, when a fudget program is run with the -debug flag, a trace of all IO operations and their results is printed on stderr. As another example, the cacheF fudget wrapper speeds up fudget programs by caching the result of requests for colors, fonts and other GUI resources. It would be easy to write a wrapper that swaps the left and right mouse buttons, or makes a program ask for the user's permission before deleting a file. Try doing things like that by adding a wrapper around a value of type IO()!

I must confess I'm not all that familiar with Fudgets, although it certainly looks interesting. For what sort of problems is it currently the best solution?

I guess it depends on what you are comparing to, but if you like programming GUIs in a declarative style, you don't need the FFI but can live with the IO operations already provided by the fudget library (which includes file/directory access and networking), or perhaps you want to experiment with implementing your own special purpose widgets in Haskell (Fudgets implements its own widget set in Haskell), then using Fudgets might be a good choice. But when the GUI starts getting big and irregular, the plumbing can become a bit clumpsy (some would even say painful, "worse than having a tooth pulled" :-).

--
Thomas H

[1] http://www.haskell.org/fruit
[2] 
http://www.cs.chalmers.se/~hallgren/Thesis/fudgets-implementation.html#fudgets-on-monadIO


_______________________________________________ Haskell-Cafe mailing list [EMAIL PROTECTED] http://www.haskell.org/mailman/listinfo/haskell-cafe

Reply via email to