fudgets: The Fudgets Library

[ concurrency, gui, library, network, program ] [ Propose Tags ]

Fudgets is a Graphical User Interface Toolkit built in Haskell on top of the X11 Windows system in the early 1990s. There is an FPCA-93 paper about it. Fudgets also makes it easy to create client/server applications that communicate via the Internet.

This package includes the Fudgets library and a few small examples and demo applications.

For installation instructions, see the last section of the Readme.

[Skip to Readme]


Manual Flags


Enable options useful for developers of this library

Automatic Flags

Use the old-time package


Use -f <flag> to enable a flag, or -f -<flag> to disable that flag. More info


Maintainer's Corner

Package maintainers

For package maintainers and hackage trustees


  • No Candidates
Versions [RSS] 0.18.3,,, 0.18.4
Change log ChangeLog.md
Dependencies array, base (>=4 && <5), containers, directory (>=1.2.3), fudgets, old-time, parallel, process, random, time, unix [details]
License LicenseRef-OtherLicense
Author Thomas Hallgren and Magnus Carlsson and others
Maintainer Thomas Hallgren
Category GUI, Network, Concurrency
Home page https://www.altocumulus.org/Fudgets/
Uploaded by ThomasHallgren at 2022-08-04T13:42:02Z
Distributions NixOS:0.18.4
Executables doRequest, XMine, Tiles, Life, FudPaint, Explore, SpaceInvaders2, FancyHello, texteditor, StopWatch, fudgetclock, Graph
Downloads 308 total (10 in the last 30 days)
Rating (no votes yet) [estimated by Bayesian average]
Your Rating
  • λ
  • λ
  • λ
Status Docs available [build log]
Last success reported on 2022-08-04 [all 1 reports]

Readme for fudgets-

[back to package description]

¤ Fudgets ¤

Fudgets is primarily a Graphical User Interface Toolkit implemented in Haskell on top of its own binding to the Xlib library of the X Windows system. Fudgets also makes it easy to create client/server applications that communicate via the Internet. The Hello world program fits on a single line:

main = fudlogue (shellF "Hello" (labelF "Hello world!"))

The key abstraction is the fudget. A fudget is a stream processor with high-level and low-level streams. The high level streams are used for communication between fudgets within a program. The low level streams are for communication with the I/O system.

Fudgets are combined using various combinators for parallel composition, serial composition and loops.

Fudgets was originally implemented in Lazy ML in the early 1990s, then converted to Haskell. It was thus designed before monadic IO was introduced in Haskell and early versions did not make use of Haskell's type classes at all.


Installing Fudgets from Hackage

On Linux systems

  • sudo apt install libxext-dev
  • cabal install fudgets

(The first command installs Xlib etc on Debian-based distributions, the command and package name may be different on other Linux distributions.)

On macOS

  • Install XQuartz.
  • Install Homebrew.
  • brew install gcc
  • cabal install fudgets

(The preprocessor in clang does not preserve layout, so we use gcc instead. Also, with ghc>=8.10.3 there seems to be problem with the -optP option, so we use a helper script hsrc/fudcpp to call cpp with the correct options.)