The implementation of the Gofer functional programming system

The Gofer system is a functional programming environment for a small, Haskell-like language. Supporting a wide range of dierent machines, including home computers, the system is widely used, both for teaching and research. This report describes the main ideas and techniques used in the implementation of Gofer. This information will be particularly useful for work using Gofer as a platform to explore the use of new language features or primitives. It should also be of interest to those curious to see how the general techniques of functional programming language compilation are adapted to a simple, but practical, implementation.

[1]  Simon Peyton Jones,et al.  Implementing functional languages , 1992 .

[2]  Andrew W. Appel,et al.  Garbage Collection can be Faster than Stack Allocation , 1987, Inf. Process. Lett..

[3]  Geoffrey Smith,et al.  On the Complexity of ML Typability with Overloading , 1991, FPCA.

[4]  Mark P. Jones Computing with Lattices: An Application of Type Classes , 1992, J. Funct. Program..

[5]  Simon L. Peyton Jones,et al.  Lazy functional state threads , 1994, PLDI '94.

[6]  C. Q. Lee,et al.  The Computer Journal , 1958, Nature.

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

[8]  Mark P. Jones,et al.  Type inference for qualified types , 1994 .

[9]  Jerzy Tiuryn,et al.  Type reconstruction in the presence of polymorphic recursion , 1993, TOPL.

[10]  S BoyerRoger,et al.  Ttle sharing of structure in theorem proving programs , 1972 .

[11]  Stephen Blott,et al.  Implementing Haskell Type Classes , 1989, Functional Programming.

[12]  Uday S. Reddy,et al.  Imperative functional programming , 1996, CSUR.

[13]  Mark P. Jonesy A Theory of Qualiied Types , 1992 .

[14]  Simon L. Peyton Jones,et al.  The Implementation of Functional Programming Languages , 1987 .

[15]  Robert E. Tarjan,et al.  Depth-First Search and Linear Graph Algorithms , 1972, SIAM J. Comput..

[16]  Martin Odersky,et al.  Self-Interpretation and Reflection in a Statically Typed Language , 1993, OOPSLA 1993.

[17]  Robin Milner,et al.  Principal type-schemes for functional programs , 1982, POPL '82.

[18]  Lennart Augustsson,et al.  Implementing Haskell overloading , 1993, FPCA '93.

[19]  Simon L. Peyton Jones,et al.  Implementing lazy functional languages on stock hardware: the Spineless Tagless G-machine , 1992, Journal of Functional Programming.

[20]  Jeffrey D. Smith,et al.  Design and Analysis of Algorithms , 2009, Lecture Notes in Computer Science.

[21]  Tobias Nipkow,et al.  Type Classes and Overloading Resolution via Order-Sorted Unification , 1991, FPCA.

[22]  Stephen Blott An approach to overloading with polymorphism , 1991 .

[23]  Philip Wadler,et al.  Glasgow Workshop on Functional Programming , 1992 .

[24]  Murray Hill,et al.  Yacc: Yet Another Compiler-Compiler , 1978 .

[25]  Philip Wadler,et al.  How to make ad-hoc polymorphism less ad hoc , 1989, POPL '89.

[26]  D. A. Turner,et al.  A new implementation technique for applicative languages , 1979, Softw. Pract. Exp..

[27]  Geoffrey Smith Polymorphic Type Inference for Languages with Overloading and Subtyping , 1991 .

[28]  Cordelia V. Hall Using Overloading to Express Distinctions Between Evaluators , 1993, Inf. Process. Lett..

[29]  Mark P. Jones Qualified Types: Theory and Practice , 1994 .

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

[31]  Stefan Kaes,et al.  Parametric Overloading in Polymorphic Programming Languages , 1988, ESOP.

[32]  Robin Milner,et al.  A Theory of Type Polymorphism in Programming , 1978, J. Comput. Syst. Sci..

[33]  John Peterson,et al.  Implementing type classes , 1993, PLDI '93.

[34]  Jon Fairbairn,et al.  Non-Strict Languages - Programming and Implementation , 1989, Comput. J..

[35]  E. P. Wentworth Pitfalls of conservative garbage collection , 1990, Softw. Pract. Exp..

[36]  Tobias Nipkow,et al.  Type checking type classes , 1993, POPL '93.

[37]  Mark P. Jones A Theory of Qualified Types , 1994, Sci. Comput. Program..

[38]  Hans-Juergen Boehm,et al.  Garbage collection in an uncooperative environment , 1988, Softw. Pract. Exp..

[39]  Richard S. Bird,et al.  Introduction to functional programming , 1988, Prentice Hall International series in computer science.

[40]  Thomas Johnsson,et al.  Lambda Lifting: Treansforming Programs to Recursive Equations , 1985, FPCA.

[41]  Thomas Johnsson,et al.  The Chalmers Lazy-ML Compiler , 1989, Computer/law journal.

[42]  Robin Milner,et al.  Definition of standard ML , 1990 .

[43]  Andrew W. Appel,et al.  Standard ML of New Jersey , 1991, PLILP.

[44]  Sho-Huan Simon Tung Interactive modular programming in Scheme , 1992, LFP '92.

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

[46]  Bjarne Stroustrup,et al.  C++ Programming Language , 1986, IEEE Softw..

[47]  Mark P. Jones A Theory of Qualified Types , 1992, ESOP.

[48]  Simon L. Peyton Jones,et al.  The Glasgow Haskell Compiler: A Retrospective , 1992, Functional Programming.