Keep it clean: a unique approach to functional programming.

CLEAN ~ is a functional language specially designed to make the development of real world applications possible. In this paper we give a short overview of the most important features of the language. The CLEAN compiler offers high compilation speed yet the quality of the produced native code is state-of-the-art. Of particular importance for practical use is CLEAN's uniqueness typing enabling destructive updates of arbitrary objects and the creation of direct interfaces with the outside world, all within a purely functional framework. CLEAN's "unique" features have been used to predefine (in CLEAN) a sophisticated I/O library enabling a CLEAN programmer to specify interactive window-based I/O applications on a very high level of abstraction. One can write programs creating and combining interactive objects with arbitrary local state. Furthermore, it is also possible to create lightweight processes which can communicate via files, shared state or (a)synchronous message passing primitives (including remote procedure call). Interactive CLEAN programs can be ported to a large variety of platforms such as WINDOWS '95 / NT, MAcOS, UNIX (SUN), LINUX (PC) and OS/2 (PC) without modification of source code. CLEAN and its Integrated Development Environment can be obtained via www.cs.kun.nl/-clean.

[1]  E. R I K B A R En D S E N,et al.  Uniqueness Typing for Functional Languages with Graph Rewriting Semantics , 1996 .

[2]  WadlerPhilip,et al.  Report on the programming language Haskell , 1992 .

[3]  Marko C. J. D. van Eekelen,et al.  Functional Programming and Parallel Graph Rewriting , 1993 .

[4]  Mark P. Jones A system of constructor classes: overloading and implicit higher-order polymorphism , 1993, FPCA '93.

[5]  Marinus J. Plasmeijer,et al.  The Ins and Outs of Clean I/O , 1995, J. Funct. Program..

[6]  X. Leroy Le système Caml Special Light: modules et compilation efficace en Caml , 1995 .

[7]  John McCarthy,et al.  Recursive functions of symbolic expressions and their computation by machine, Part I , 1960, Commun. ACM.

[8]  M.H.G. Kesseler,et al.  The implementation of functional languages on parallel machines with distributed memory , 1996 .

[9]  Henk Barendregt,et al.  The Lambda Calculus: Its Syntax and Semantics , 1985 .

[10]  Patrick Lincoln,et al.  Linear logic , 1992, SIGA.

[11]  Marko C. J. D. van Eekelen,et al.  CLEAN: A language for functional graph writing , 1987, FPCA.

[12]  D. A. Turner,et al.  Miranda: A Non-Strict Functional language with Polymorphic Types , 1985, FPCA.

[13]  Joe Armstrong,et al.  Concurrent programming in ERLANG , 1993 .

[14]  Robin Milner,et al.  Standard ML: Report ECS-LFCS-86-2 , 1986 .

[15]  Jan Willem Klop,et al.  Term Graph Rewriting , 1995, HOA.

[16]  Marko C. J. D. van Eekelen,et al.  Concurrent Clean , 1991, PARLE.

[17]  Marinus J. Plasmeijer,et al.  Interactive Functional Objects in Clean , 1997, Implementation of Functional Languages.

[18]  Mike Williams,et al.  ERLANG for Concurrent Programming , 1993 .

[19]  Marko C. J. D. van Eekelen,et al.  Implementing a Functional Spreadsheet in Clean , 1995, J. Funct. Program..

[20]  Erik Barendsen,et al.  Uniqueness Typing for Functional Languages with Graph Rewriting Semantics , 1996, Math. Struct. Comput. Sci..

[21]  Erik Barendsen,et al.  Extending Graph Rewriting with Copying , 1993, Dagstuhl Seminar on Graph Transformations in Computer Science.

[22]  Philip Wadler,et al.  How to declare an imperative , 1997, CSUR.

[23]  John H. G. van Groningen The Implementation and Efficiency of Arrays in Clean 1.1 , 1996, Implementation of Functional Languages.

[24]  Peter Achten,et al.  Interactive functional programs: models, methods, and implementation , 1996 .

[25]  Simon L. Peyton Jones,et al.  Report on the programming language Haskell: a non-strict, purely functional language version 1.2 , 1992, SIGP.

[26]  Marco Pil First Class File I/O , 1996, Implementation of Functional Languages.

[27]  John Hughes,et al.  Report on the Programming Language Haskell 98 , 1999 .