ANNOUNCE: Sifflet visual programming language, release 2.0.0.0

I don't usually get this excited about a release, but after nearly a year of not being able to do any work on Sifflet, I am now *Extremely Happy* to announce -- Sifflet and sifflet-lib 2.0.0.0, now available on Hackage! This version introduces a type checker and partial support for higher order functions in Sifflet, the visual, functional programming language and support system for students learning about recursion. Sifflet programmers define functions by drawing diagrams, and the Sifflet interpreter uses the diagrams to show how function calls are evaluated. Sifflet-lib is the library containing many modules of the Sifflet application. What's New ---------- July 5, 2012, Version 2.0.0.0: * Partial support for higher order functions, like map and filter. See Lesson 10 in the Sifflet Tutorial. * Sifflet now provides type checking and type inference. This should make it possible to provide exporters to languages, like Java, that require type declarations. (Unfortunately, the error messages for incorrectly typed functions are not yet friendly for novice programmers.) * Added a menu command (File / Save image ...) to save vector graphic images of functions in the Sifflet Workspace or Edit function windows. Images can be saved in SVG, Postscript, and PDF formats. * Reorganized hierarchical modules in the library to conform to the recommended practice. See the RELEASE-NOTES for details. * Several bugs are fixed, including one which crashed Sifflet when applying a function definition with an incomplete `if` tree. See ISSUES for details. * There is a new file format for saving function definitions to support higher-order function types. The new format, siffml 2.0, has a RELAX NG schema; siffml 1.0 files can still be opened in Sifflet 2.0. About Sifflet ------------- Sifflet is a visual, functional programming language intended as an aid for learning about recursion. * A picture explains Sifflet better than words: please see the screenshot showing how to evaluate 3!: http://mypage.iu.edu/~gdweber/software/sifflet/home.html * Features: - Visual editor. - Visual tracer/debugger which shows how recursive and other function calls are evaluated. To support active learning and avoid screen clutter, Sifflet displays only as much of the computation as the user requests. - Carefully crafted tutorial with 44 pictures, about 26 pages if printed. - Number, string, and list data types. - Small collection of primitive functions. - Runnable examples of compound functions. - Sifflet functions can be exported to Scheme, Python 3, and Haskell. References ---------- * Download: http://hackage.haskell.org/package/sifflet-lib http://hackage.haskell.org/package/sifflet * Home page: http://mypage.iu.edu/~gdweber/software/sifflet/home.html * Sifflet Tutorial: http://mypage.iu.edu/~gdweber/software/sifflet/doc/tutorial.html * RELEASE-NOTES: http://mypage.iu.edu/~gdweber/software/sifflet/RELEASE-NOTES * ISSUES: http://mypage.iu.edu/~gdweber/software/sifflet/ISSUES ------------------------------------------------------------------------ -- Gregory D. Weber, Ph. D. : Associate Professor of Informatics / \ Indiana University East 0 : Tel. (765) 973-8420; FAX (765) 973-8550 / \ http://mypage.iu.edu/~gdweber/ 1 []

On Thu, 5 Jul 2012, gdweber@iue.edu wrote:
Sifflet and sifflet-lib 2.0.0.0, now available on Hackage!
This version introduces a type checker and partial support for higher order functions in Sifflet, the visual, functional programming language and support system for students learning about recursion.
You have implemented your own type-checker, right? I plan to add a type-checker to our live-sequencer project. [1] So far I have thought about using the Helium type checker but I have not done it so far. If you want to make your type-checker useful for other projects, you may put it into a separate package without the hard to install dependencies on cairo and glib. [1] http://www.youtube.com/watch?v=sXywCHR9WwE

On 2012-Jul-07, Henning Thielemann wrote:
On Thu, 5 Jul 2012, gdweber@iue.edu wrote:
Sifflet and sifflet-lib 2.0.0.0, now available on Hackage!
This version introduces a type checker and partial support for higher order functions in Sifflet, the visual, functional programming language and support system for students learning about recursion.
You have implemented your own type-checker, right?
It is my code implementing the type checker from Simon Peyton-Jones's book "The Implementation of Functional Programming Languages" (1987).
I plan to add a type-checker to our live-sequencer project. [1] So far I have thought about using the Helium type checker but I have not done it so far. If you want to make your type-checker useful for other projects, you may put it into a separate package without the hard to install dependencies on cairo and glib.
I am very interested in receiving suggestions for modularizing my packages, and I thank you for this one. I should point out that the Sifflet type checker (unlike Helium's) is not a type checker for Haskell, or even a reduced version of Haskell, but for a very small language consisting of these expressions (from Language.Sifflet.Expr): data Expr = EUndefined | ESymbol Symbol | EBool Bool | EChar Char | ENumber Number | EString String | EIf Expr Expr Expr -- ^ if test branch1 branch2 | EList [Expr] | ELambda Symbol Expr | EApp Expr Expr -- ^ apply function to argument | ECall Symbol [Expr] -- ^ function name, arglist | EOp Operator Expr Expr -- ^ binary operator application | EGroup Expr -- ^ grouping parentheses deriving (Eq, Show) (there are some redundant variants there, because I designed Expr before thinking about type checking and then augmented it to add the type checker) and these types data Type = TypeVar TypeVarName -- named type variable | TypeCons TypeConsName [Type] -- constructed type deriving (Eq) Do you still think my type checker would be useful to you, or to Haskellers generally?
Ah, I enjoyed the performance! Greg -- Gregory D. Weber, Ph. D. : Associate Professor of Informatics / \ Indiana University East 0 : Tel. (765) 973-8420; FAX (765) 973-8550 / \ http://mypage.iu.edu/~gdweber/ 1 []

On Mon, 9 Jul 2012, gdweber@iue.edu wrote:
data Type = TypeVar TypeVarName -- named type variable | TypeCons TypeConsName [Type] -- constructed type deriving (Eq)
Do you still think my type checker would be useful to you, or to Haskellers generally?
I see. Then it is probably not very useful for me. :-(
Ah, I enjoyed the performance!
Nice to hear that you like it!
participants (2)
-
gdweber@iue.edu
-
Henning Thielemann