The project has resulted in the software product Fudgets (Functional Widgets), a software library for the construction of graphical user interfaces on a high level in the functional language Haskell. As a spin-off effect, Fudgets also support the development of client/server based software than can communicate via the Internet.
Still, to make it really useful to the community and for our own related projects, resources must be spent in developing a complete set of interface elements, and documenting the system with a tutorial, user's manual and a hypertext reference manual. Thus, we plan to dedicate a full time programmer during three years on developing the toolkit in this direction. We do not want to spend too much PhD-student time into this, since the work does not necessarily lead to a thesis.We received only 50 percent of the funding we applied for. Even so, the fudget library has been developed further with a number of new user interface elements, a hyper-text manual and a number of example applications. In addition, the programming method has proved to be useful for a more general class of problems where parallelism is present. The Fudget Library thus supports the development of client/server based software. This has been used in the implementation of a tool for group activity planning, that has simplified the planning of meetings at our department on several occasions.
The design of the Fudget Library started with the desire to find a good abstraction of GUI building blocks, i.e., an abstraction that makes use of the powerful abstraction mechanisms found in functional languages (higher order functions, polymorphism, etc.) and thereby, hopefully, is better than the abstractions you find in typical GUI toolkits for conventional, imperative languages.
The main abstraction used in the Fudget Library is the fudget. Fudgets are processes which can, via type safe message passing, communicate with other concurrently running fudgets and with the outside world. Fudgets are still ordinary values that can be passed as arguments to functions, etc. A fudget may have an internal state, which is not visible in the type of the fudget. Fudget programming in this respect resembles object oriented programming, where state information is distributed and hidden within objects rather than centralized and exposed to arbitrary use or misuse. This also makes fudgets easy to compose, like functions in functional languages.