Simple, visual, functional language for learning about recursion.

Latest on Hackage:2.3.0

This package is not currently in any snapshots. If you're interested in using it, we recommend adding it to Stackage Nightly. Doing so will make builds more reliable, and allow to host generated Haddocks.

BSD3 licensed by Gregory D. Weber
Maintained by "gdweber" ++ drop 3 "abc@" ++ ""

Sifflet -- README -- Sifflet


Copyright (C) 2010 Gregory D. Weber

BSD3 license -- see the file "LICENSE" for details


A. In a Cabal sandbox (bracketed parts are optional) (with the source distribution unpacked)

$ cabal sandbox init
$ cabal update

You will need this to build the Haskell gtk library if it is not already installed:

$ cabal install gtk2hs-buildtools


$ cabal install --only-dependencies [--enable-tests]
$ cabal configure [--enable-tests]
$ cabal build [-j4]
$ cabal install

B. In a Cabal sandbox, directly installing from Hackage:

$ cabal sandbox init
$ cabal update
$ cabal install sifflet
  1. Configure, either for system-wide installation:

    $ runghc Setup configure

    or for installation in a user directory:

    $ runghc Setup configure --user --prefix=~/where/to/install/

  2. Build and install:

    $ runghc Setup build $ runghc Setup install


Please see the Sifflet home page for documentation:

and especially the tutorial:



Release notes for sifflet and sifflet-lib

This is the RELEASE-NOTES file for both sifflet and sifflet-lib. If you are editing it, be sure you are editing the original and not the copies in the app and lib subdirectories.

Release, 2012 July 5

  • Reorganized hierarchical modules to conform to

    • Sifflet.Data.X is now Data.Sifflet.X for X in [Functoid, Geometry, Tree, TreeGraph, TreeLayout, WGraph]
    • Sifflet.Foreign.X is now Language.Sifflet.Export.X for X in [Exporter, Haskell, Python, ToHaskell, ToPython, ToScheme]
    • Sifflet.Language.X is now Language.Sifflet.X for X in [Expr, Parser, SiffML]
    • Sifflet.Rendering.X is now Graphics.Rendering.Sifflet.X for X in [Draw, DrawTreeGraph]
    • Sifflet.Text.X is now Text.Sifflet.X for X in [Pretty, Repr]
    • Sifflet.UI.X is now Graphics.UI.Sifflet.X for X in [Callback, Canvas, Frame, GtkForeign, GtkUtil, LittleGtk, RPanel, Tool, Types, Window, Workspace]
    • Sifflet.UI is now Graphics.UI.Sifflet
    • Sifflet.Util is now Language.Sifflet.Util, and Sifflet.Examples is now Language.Sifflet.Examples. (not clear that this is really the best place for it; maybe it hsould be split into pieces, such as Control.Monad.SuccFail, ...)
    • Sifflet.Examples is now Language.Sifflet.Examples.
  • File menu command to save the image of the Workspace or any open editor window, in SVG, PS, or PDF format.

  • Implemented type checking with type inference. Type inference can be used for export to languages that require type declarations. Type checking error messages are not friendly for novice programmers; this needs improvement.

  • Editing a function can now change its type.
    • It is now possible to change the arguments of a function (add, rename, or remove arguments, or for functional arguments, change the kind or arity).
  • Bug fixes:
    • Fixed bug where the program crashed from incomplete 'if' trees
    • Various small bug fixes.
  • Added RELAX NG schema for siffml version 2.0 (in datafiles). This is an upwards-compatible extension of siffml 1.0, which adds FunctionType to the alternatives for SiffletType.

  • Added RELAX NG schema for siffml version 1.0 (in datafiles)

Release, 2012 Jun 14 (or later)

  • Compatibility with mtl 2.1.1

Release 1.2.5, 2012 Jun 1

  • Compatibility with GHC 7.4.1

Release 1.2.4, 2011 Mar 18

  • Compatibility with HXT > 9.0

Release 1.2.3, 2011 Feb 18

  • Compatibility with GHC 7 and Haskell Platform 2011.2

Release 1.2.2, 2010 Dec 3

  • Offers to save changes before quitting

Release 1.2.1, 2010 Nov 19

  • Compatibility with Haskell GTK packages 0.12

Release 1.2, 2010 Oct 30

  • Requires HXT 9.0
  • Avoids indirect dependency on curl

Release 1.1, 2010 Aug 24

  • Improved Haskell exporter now removes most unnecessary parentheses.
  • Exported Haskell code now uses the module Data.Number.Sifflet, formerly Sifflet.Data.Number.
  • Sifflet now builds with slightly newer versions of the Haskell "Gtk2hs" libraries (cairo, gtk, glib), should work for versions >= 0.11.0 and < 0.12.

Release 1.0, 2010 Aug 11

  • Sifflet now has exporters to Scheme, Python, and Haskell and a small supporting "library" for each of those languages. This is intended for beginning students who are learning these languages, not for "industrial-strength" code production.

  • Although the exporters apparently generate correct code, there are at present too many parentheses -- a few extra in Python, many extra in Haskell; no extra parentheses in Scheme, of course.

  • Sifflet has a new number type, Sifflet.Data.Number.Number, which allows numbers to be exact or inexact, almost as in Scheme. Originally intended for the Scheme exporter, it is now also used internally by Sifflet's interpreter.

  • The code is reorganized. There is now a separate library package, sifflet-lib, in addition to the sifflet package which provides only the executable. At present, the library's API is highly unstable.

  • Sifflet has a new parser for user inputs, made with Parsec, allowing more intuitive input of numbers (liberation from Haskell number syntax: for example, 0.0 can now be entered as 0.0, 0., or .0) and providing more intelligible error messages for some kinds of invalid input.

  • Sifflet requires Gtk2hs packages (gtk, glib, cairo) version 0.11; support for the 0.10 Gtk2hs packages is dropped.

Release 0.1.7, 2010 June 10

  • Tightened upper bounds on package dependency versions, in anticipation of incompatible changes in the fgl API.
  • No bug fixes or new features.
  • Users who are staying with fgl == will not benefit from upgrading to Sifflet 0.1.7.

Release 0.1.6, 2010 May 27

  • Sifflet offers to save your work if you give the quit or open file command and have unsaved changes.
  • Sifflet now builds with Gtk2hs 0.11.
  • Some bug fixes and improved error checking.

Release 0.1.5, 2010 May 13

First public release.

comments powered byDisqus