Reasoning About Effects: Seeing the Wood Through the Trees (2009)
Pure functional languages such as Haskell support programming with impure effects by exploiting mathematical notions such as monads, applicative functors, and arrows. However, in contrast to the...
Details Title Programming in Haskell (2009)
Haskell Graham Hutton, Graham Hutton
where he taught the first year functional programming course for several years. He has an impressive publishing record going back to 1990. Scope The book covers the Haskell language, programming...
Implementing Software Transactional Memory, Correctly (2008)
In recent years there has been much interest in the idea of concurrent programming using transactional memory, for example as provided in STM Haskell. While programmers are provided with a simple...
Reasoning About Effects: Seeing the Wood Through the Trees (Extended Version) (2008)
Pure functional languages such as Haskell support programming with impure effects by exploiting mathematical notions such as monads, applicative functors, and arrows. However, in contrast to the...
Reference The following presentation is based on... (2008)
Graham Hutton, Erik Meijer, Monadic Parser Combinators
•...in the following summarized as parsing...an application of functional programming typically used to demonstrate its power and elegance. Enjoys a long history. An early work for example is...
There are many advantages to writing functional programs in a compositional style, such as clarity and modularity. However, the intermediate data structures produced may mean that the resulting...
Interrupts are important for writing robust, modular programs, but are traditionally viewed as being difficult from a semantic perspective. In this article we present a simple, formally justified,...
There are many advantages to writing functional programs in a compositional style, such as clarity and modularity. However, the intermediate data structures produced may mean that the resulting...
Chapter 1 Calculating an Exceptional Machine (2008)
Abstract: In previous work we showed how to verify a compiler for a small language with exceptions. In this article we show how to calculate, as opposed to verify, an abstract machine for this...
Asynchronous exceptions, or interrupts, are important for writing robust, modular programs, but are traditionally viewed as being difficult from a semantic perspective. In this article we present a...
In combinator parsing, the text of parsers resembles BNF notation. We present the basic method, and a number of extensions. We address the special problems presented by white– space, and parsers...
Chapter 1 Calculating an Exceptional Machine (Extended Version) (2008)
Abstract: In previous work we showed how to verify a compiler for a small language with exceptions. In this article we show how to calculate, as opposed to verify, an abstract machine for this...
Asynchronous exceptions, or interrupts, are important for writing robust, modular programs, but are traditionally viewed as being difficult from a semantic perspective. In this article we present a...
Compiling Exceptions Correctly (Extended Version) (2007)
Abstract. Exceptions are an important feature of modern programming languages, but their compilation has traditionally been viewed as an advanced topic. In this article we show that the basic method...
1 Monadic Parser Combinators (2007)
Graham Hutton, Graham Hutton, Erik Meijer, Erik Meijer
In functional programming, a popular approach to building recursive descent parsers is to model parsers as functions, and to define higher-order functions (or combinators) that implement grammar...
Haskell Communities and Activities Report (2007)
Andres Löh (ed, Lloyd Allison, Tiago Miguel, Laureano Alves, Krasimir Angelov, Carlos Areces, ...
You are reading the twelfth edition of the Haskell Communities and Activities Report – as always, containing entries from enthusiastic Haskellers all over the world. This edition has 138 entries,...
The worker/wrapper transformation is a technique for changing the type of a computation, usually with the aim of improving its performance. It has been used by compiler writers for many years, but...
The worker/wrapper transformation is a technique for changing the type of a computation, usually with the aim of improving its performance. It has been used by compiler writers for many years, but...
Haskell Communities and Activities Report (2006)
Andres Löh (ed, Lloyd Allison, Tiago Miguel, Laureano Alves, Krasimir Angelov, Dmitry Astapov, ...
Welcome to the eleventh edition of the Haskell Communities and Activities Report – a collection of entries about everything that is going on and related to Haskell in some way that appears twice a...
Haskell Communities and Activities Report (2006)
Andres Löh (ed, Lloyd Allison, Tiago Miguel, Laureano Alves, Krasimir Angelov, Dmitry Astapov, ...
This is the tenth edition of the Haskell Communities and Activities Report (HCAR) – a collection of entries about everything that is going on and related to Haskell in some way that appears twice a...
This report contains edited abstracts from BCTCS 2005, which was held on 22nd to 24th March 2005 in Nottingham, England.
This report contains edited abstracts from BCTCS 2005, which was held on 22nd to 24th March 2005 in Nottingham, England.
This report contains edited abstracts from BCTCS 2005, which was held on 22nd to 24th March 2005 in Nottingham, England.
Proof Methods for Corecursive Programs (2005)
Hutton, Graham, Gibbons, Jeremy
Recursion is a well-known and powerful programming technique, with a wide variety of applications. The dual technique of corecursion is less well-known, but is increasingly proving to be just as...
Proof Methods for Corecursive Programs (2005)
Hutton, Graham, Gibbons, Jeremy
Recursion is a well-known and powerful programming technique, with a wide variety of applications. The dual technique of corecursion is less well-known, but is increasingly proving to be just as...
Proof Methods for Corecursive Programs (2005)
Hutton, Graham, Gibbons, Jeremy
Recursion is a well-known and powerful programming technique, with a wide variety of applications. The dual technique of corecursion is less well-known, but is increasingly proving to be just as...
Calculating an Exceptional Machine (2005)
In previous work we showed how to verify a compiler for a small language with exceptions. In this article we show how to calculate, as opposed to verify, an abstract machine for this language. The...
Hope, Catherine, Hutton, Graham
Starting with an evaluator for a language, an abstract machine for the same language can be mechanically derived using successive program transformations. This has relevance to studying both the...
Calculating an Exceptional Machine (2005)
In previous work we showed how to verify a compiler for a small language with exceptions. In this article we show how to calculate, as opposed to verify, an abstract machine for this language. The...
Hope, Catherine, Hutton, Graham
Starting with an evaluator for a language, an abstract machine for the same language can be mechanically derived using successive program transformations. This has relevance to studying both the...
Abstract Starting with an evaluator for a language, an abstract machine for the same language can be mechanically derived using successive program transformations. This has relevance to studying both...
Proof Methods for Corecursive Programs (2005)
Recursion is a well-known and powerful programming technique, with a wide variety of applications. The dual technique of corecursion is less well-known, but is increasingly proving to be just as...
Abstract Starting with an evaluator for a language, an abstract machine for the same language can be mechanically derived using successive program transformations. This has relevance to studying both...
Haskell Communities and Activities Report (2005)
Andres Löh (ed, Lloyd Allison, Tiago Miguel, Laureano Alves, Krasimir Angelov, Alistair Bayley, ...
Finally, here is the 9th edition of the Haskell Communities and Activities Report (HCAR), almost three weeks after the submission deadline. This delay is entirely my own fault. In fact, I have to...
Haskell Communities and Activities Report (2005)
Andres Löh (ed, Perry Alexander, Lloyd Allison, Tiago Miguel, Laureano Alves, Krasimir Angelov, ...
You are reading the 8th edition of the Haskell Communities and Activities Report (HCAR). These are interesting times to be a Haskell enthusiast. Everyone seems to be talking about darcs ( → 6.3)...
Calculating an Exceptional Machine (2005)
In previous work we showed how to verify a compiler for a small language with exceptions. In this article we show how to calculate, as opposed to verify, an abstract machine for this language. The...
Hope, Catherine, Hutton, Graham
Starting with an evaluator for a language, an abstract machine for the same language can be mechanically derived using successive program transformations. This has relevance to studying both the...
Compiling Exceptions Correctly (2004)
Exceptions are an important feature of modern programming languages, but their compilation has traditionally been viewed as an advanced topic. In this article we show that the basic method of...
Compiling Exceptions Correctly (2004)
Exceptions are an important feature of modern programming languages, but their compilation has traditionally been viewed as an advanced topic. In this article we show that the basic method of...
Haskell Communities and Activities Report (2004)
Andres Löh (ed, Perry Alexander, Lloyd Allison, Krasimir Angelov, Alistair Bayley, Jérémy Bobbio, ...
Welcome to the Seventh edition of the Haskell Communities and Activities report. I can proudly announce that the report has survived yet another change of editor, and chances are good that this...
Compiling Exceptions Correctly (2004)
Exceptions are an important feature of modern programming languages, but their compilation has traditionally been viewed as an advanced topic. In this article we show that the basic method of...
Compiling Exceptions Correctly (2004)
Exceptions are an important feature of modern programming languages, but their compilation has traditionally been viewed as an advanced topic. In this article we show that the basic method of...
We systematically develop a functional program that solves the countdown problem, a numbers game in which the aim is to construct arithmetic expressions satisfying certain constraints. Starting from...
We systematically develop a functional program that solves the countdown problem, a numbers game in which the aim is to construct arithmetic expressions satisfying certain constraints. Starting from...
We systematically develop a functional program that solves the countdown problem, a numbers game in which the aim is to construct arithmetic expressions satisfying certain constraints. Starting from...
Functional Pearl: the countdown problem (2002)
We systematically develop a functional program that solves the countdown problem, a numbers game in which the aim is to construct arithmetic expressions satisfying certain constraints. Starting from...
The Generic Approximation Lemma (2001)
Hutton, Graham, Gibbons, Jeremy
The approximation lemma is a simplification of the well-known take lemma, and is used to prove properties of programs that produce lists of values. We show how the approximation lemma, unlike the...
The Generic Approximation Lemma (2001)
Hutton, Graham, Gibbons, Jeremy
The approximation lemma is a simplification of the well-known take lemma, and is used to prove properties of programs that produce lists of values. We show how the approximation lemma, unlike the...
The Generic Approximation Lemma (2001)
Hutton, Graham, Gibbons, Jeremy
The approximation lemma is a simplification of the well-known take lemma, and is used to prove properties of programs that produce lists of values. We show how the approximation lemma, unlike the...
When is a function a fold or an unfold (2001)
Jeremy Gibbons, Graham Hutton, Thorsten Altenkirch
We give a necessary and sufficient condition for when a set-theoretic function can be written using the recursion operator fold, and a dual condition for the recursion operator unfold. The conditions...
The generic approximation lemma (2001)
The approximation lemma is a simplification of the well-known take lemma, and is used to prove properties of programs that produce lists of values. We show how the approximation lemma, unlike the...
When is a function a fold or an unfold (2001)
Jeremy Gibbons, Graham Hutton, Thorsten Altenkirch
We give a necessary and su#cient condition for when a set-theoretic function can be written using the recursion operator fold, and a dual condition for the recursion operator unfold. The conditions...
The approximation lemma is a simplification of the well-known take lemma, and is used to prove properties of programs that produce lists of values. We show how the approximation lemma, unlike the...
A Tutorial on the Universality and Expressiveness of Fold (1999)
In functional programming, fold is a standard operator that encapsulates a simple pattern of recursion for processing lists. This article is a tutorial on two key aspects of the fold operator for...
A Tutorial on the Universality and Expressiveness of Fold (1999)
In functional programming, fold is a standard operator that encapsulates a simple pattern of recursion for processing lists. This article is a tutorial on two key aspects of the fold operator for...
A Tutorial on the Universality and Expressiveness of Fold (1999)
In functional programming, fold is a standard operator that encapsulates a simple pattern of recursion for processing lists. This article is a tutorial on two key aspects of the fold operator for...
Proof Methods for Structured Corecursive Programs (1999)
Gibbons, Jeremy, Hutton, Graham
Corecursive programs produce values of greatest fixpoint types, in contrast to recursive programs, which consume values of least fixpoint types. There are a number of widely used methods for proving...
Proof Methods for Structured Corecursive Programs (1999)
Gibbons, Jeremy, Hutton, Graham
Corecursive programs produce values of greatest fixpoint types, in contrast to recursive programs, which consume values of least fixpoint types. There are a number of widely used methods for proving...
Proof Methods for Structured Corecursive Programs (1999)
Corecursive programs produce values of greatest fixpoint types, in contrast to recursive programs, which consume values of least fixpoint types. There are a number of widely used methods for proving...
Proof Methods for Structured Corecursive Programs (1999)
Corecursive programs produce values of greatest fixpoint types, in contrast to recursive programs, which consume values of least fixpoint types. There are a number of widely used methods for proving...
A tutorial on the universality and expressiveness of fold (1999)
In functional programming, fold is a standard operator that encapsulates a simple pattern of recursion for processing lists. This article is a tutorial on two key aspects of the fold operator for...
Proof methods for structured corecursive programs (1999)
Corecursive programs produce values of greatest fixpoint types, in contrast to recursive programs, which consume values of least fixpoint types. There are a number of widely used methods for proving...
Proof Methods for Structured Corecursive Programs (1999)
Gibbons, Jeremy, Hutton, Graham
Corecursive programs produce values of greatest fixpoint types, in contrast to recursive programs, which consume values of least fixpoint types. There are a number of widely used methods for proving...
Monadic Parsing in Haskell (1998)
This paper is a tutorial on defining recursive descent parsers in Haskell. In the spirit of one-stop shopping, the paper combines material from three areas into a single source. The three areas are...
Monadic Parsing in Haskell (1998)
This paper is a tutorial on defining recursive descent parsers in Haskell. In the spirit of one-stop shopping, the paper combines material from three areas into a single source. The three areas are...
Monadic Parsing in Haskell (1998)
This paper is a tutorial on defining recursive descent parsers in Haskell. In the spirit of one-stop shopping, the paper combines material from three areas into a single source. The three areas are...
Fold and Unfold for Program Semantics (1998)
In this paper we explain how recursion operators can be used to structure and reason about program semantics within a functional language. In particular, we show how the recursion operator fold can...
Fold and Unfold for Program Semantics (1998)
In this paper we explain how recursion operators can be used to structure and reason about program semantics within a functional language. In particular, we show how the recursion operator fold can...
Fold and Unfold for Program Semantics (1998)
In this paper we explain how recursion operators can be used to structure and reason about program semantics within a functional language. In particular, we show how the recursion operator fold can...
Monadic parsing in Haskell (1998)
This paper is a tutorial on defining recursive descent parsers in Haskell. In the spirit of one-stop shopping, the paper combines material from three areas into a single source. The three areas are...
Fold and Unfold for Program Semantics (1998)
In this paper we explain how recursion operators can be used to structure and reason about program semantics within a functional language. In particular, we show how the recursion operator fold can...
Back to Basics: Deriving Representation Changers Functionally (1996)
Many functional programs can be viewed as representation changers, that is, as functions that convert abstract values from one concrete representation to another. Examples of such programs include...
Monadic Parser Combinators (1996)
In functional programming, a popular approach to building recursive descent parsers is to model parsers as functions, and to define higher-order functions (or combinators) that implement grammar...
Back to Basics: Deriving Representation Changers Functionally (1996)
Many functional programs can be viewed as representation changers, that is, as functions that convert abstract values from one concrete representation to another. Examples of such programs include...
Back to Basics: Deriving Representation Changers Functionally (1996)
Many functional programs can be viewed as representation changers, that is, as functions that convert abstract values from one concrete representation to another. Examples of such programs include...
Monadic Parser Combinators (1996)
In functional programming, a popular approach to building recursive descent parsers is to model parsers as functions, and to define higher-order functions (or combinators) that implement grammar...
Monadic Parser Combinators (1996)
Graham Hutton, Graham Hutton, Erik Meijer, Erik Meijer
In functional programming, a popular approach to building recursive descent parsers is to model parsers as functions, and to define higher-order functions (or combinators) that implement grammar...
Monadic Parser Combinators (1996)
Graham Hutton, Graham Hutton, Erik Meijer, Erik Meijer
In functional programming, a popular approach to building recursive descent parsers is to model parsers as functions, and to define higher-order functions (or combinators) that implement grammar...
Monadic Parser Combinators (1996)
Graham Hutton, Graham Hutton, Erik Meijer, Erik Meijer
In functional programming, a popular approach to building recursive descent parsers is to model parsers as functions, and to define higher-order functions (or combinators) that implement grammar...
Back to basics: Deriving representation changers functionally (1996)
value into a different concrete representation of that value. Many useful functions can be recognised as representation changers; examples include compilers, and arithmetic functions such as addition...
Monadic parser combinators (1996)
Graham Hutton, Graham Hutton, Erik Meijer, Erik Meijer
In functional programming, a popular approach to building recursive descent parsers is to model parsers as functions, and to define higher-order functions (or combinators) that implement grammar...
Monadic Parser Combinators (1996)
In functional programming, a popular approach to building recursive descent parsers is to model parsers as functions, and to define higher-order functions (or combinators) that implement grammar...
Bananas in space: Extending fold and unfold to exponential types (1995)
Fold and unfold are general purpose functionals for processing and constructing lists. By using the categorical approach of modelling recursive datatypes as fixed points of functors, these...
Categories, Allegories, and Circuit Design (1994)
Brown, Carolyn, Hutton, Graham
Languages based upon binary relations offer an appealing setting for constructing programs from specifications. For example, working with relations rather than functions allows specifications to be...
Categories, Allegories, and Circuit Design (1994)
Brown, Carolyn, Hutton, Graham
Languages based upon binary relations offer an appealing setting for constructing programs from specifications. For example, working with relations rather than functions allows specifications to be...
Ruby is a relational language developed by Jones and Sheeran for describing and designing circuits. This document is a guide to the Ruby interpreter, which allows Ruby programs to be executed....
Categories, Allegories and Circuit Design (1994)
Relational languages such as Ruby are used to derive hardware circuits from abstract specifications of their behaviour. Much reasoning is done informally in Ruby using pictorial representations of...
Ruby is a relational language developed by Jones and Sheeran for describing and designing circuits. This document is a guide to the
Categories, Allegories, and Circuit Design (1994)
Brown, Carolyn, Hutton, Graham
Languages based upon binary relations offer an appealing setting for constructing programs from specifications. For example, working with relations rather than functions allows specifications to be...
Ruby is a relational calculus for designing digital circuits. This document is a guide to the Ruby interpreter, which allows a special class of ``implementable'' Ruby programs to be executed. The...
Ruby is a relational calculus for designing digital circuits. This document is a guide to the Ruby interpreter, which allows a special class of $quot;implementable$quot; Ruby programs to be executed....
Ruby is a relational calculus for designing digital circuits. This document is a guide to the Ruby interpreter, which allows a special class of $quot;implementable$quot; Ruby programs to be executed....
Higher-Order Functions for parsing (1993)
In combinator parsing, the text of parsers resembles BNF notation. We present the basic method, and a number of extensions. We address the special problems presented by white-- space, and parsers...
A Tutorial on the Universality and Expressiveness of Fold (1993)
In functional programming, fold is a standard operator that encapsulates a simple pattern of recursion for processing lists. This article is a tutorial on two key aspects of the fold operator for...
Back to Basics: Deriving Representation Changers Functionally (1993)
A representation changer is a function that converts a concrete representation of an abstract value into a different concrete representation of that value. Many useful functions can be recognised as...
Monadic Parsing in Haskell (1993)
This paper is a tutorial on defining recursive descent parsers in Haskell. In the spirit of one-stop shopping , the paper combines material from three areas into a single source. The three areas are...
Higher-Order Functions for Parsing (1992)
In combinator parsing, the text of parsers resembles BNF notation. We present the basic method, and a number of extensions. We address the special problems presented by white-space, and parsers with...
Higher-Order Functions for Parsing (1992)
In combinator parsing, the text of parsers resembles BNF notation. We present the basic method, and a number of extensions. We address the special problems presented by white-space, and parsers with...
Higher-Order Functions for Parsing (1992)
In combinator parsing, the text of parsers resembles BNF notation. We present the basic method, and a number of extensions. We address the special problems presented by white-space, and parsers with...
Making Functionality More General (1992)
The definition for the notion of a "function" is not cast in stone, but depends upon what we adopt as types in our language. With partial equivalence relations (pers) as types in a relational...
A Calculational Theory of Pers as Types (1992)
In the calculational approach to programming, programs are derived from specifications by algebraic reasoning. This report presents a calculational programming framework based upon the notion of...
A Relational Derivation of a Functional Program (1992)
This article is an introduction to the use of relational calculi in deriving programs. Using the relational caluclus Ruby, we derive a functional program that adds one bit to a binary number to give...
A Calculational Theory of Pers as Types (1992)
In the calculational approach to programming, programs are derived from specifications by algebraic reasoning. This report presents a calculational programming framework based upon the notion of...
A Calculational Theory of Pers as Types (1992)
In the calculational approach to programming, programs are derived from specifications by algebraic reasoning. This report presents a calculational programming framework based upon the notion of...
Making Functionality More General (1992)
The definition for the notion of a "function" is not cast in stone, but depends upon what we adopt as types in our language. With partial equivalence relations (pers) as types in a relational...
A Relational Derivation of a Functional Program (1992)
This article is an introduction to the use of relational calculi in deriving programs. Using the relational caluclus Ruby, we derive a functional program that adds one bit to a binary number to give...
A Relational Derivation of a Functional Program (1992)
This article is an introduction to the use of relational calculi in deriving programs. We present a derivation in a relational language of a functional program that adds one bit to a binary number....
Making Functionality More General (1992)
The notion of functionality is not cast in stone, but depends upon what we have as types in our language. With partial equivalence relations (pers) as types we show that the functional relations are...
A Calculational Theory of Pers as Types (1992)
We present a programming paradigm based upon the notion of binary relations as programs, and partial equivalence relations (pers) as types. Our method is calculational , in that programs are derived...
A relational derivation of a functional program (1992)
This article is an introduction to the use of relational calculi in deriving programs. We present a derivation in a relational language of a functional program that adds one bit to a binary number....
A calculational theory of pers as types (1992)
We present a programming paradigm based upon the notion of binary relations as programs, and partial equivalence relations (pers) as types. Our method is calculational, in that programs are derived...
Making Functionality More General (1992)
The definition for the notion of a "function" is not cast in stone, but depends upon what we adopt as types in our language. With partial equivalence relations (pers) as types in a relational...
A Relational Derivation of a Functional Program (1992)
This article is an introduction to the use of relational calculi in deriving programs. Using the relational caluclus Ruby, we derive a functional program that adds one bit to a binary number to give...
Functional Programming With Relations (1991)
While programming in a relational framework has much to offer over the functional style in terms of expressiveness, computing with relations is less efficient, and more semantically troublesome. In...
Functional Programming With Relations (1991)
While programming in a relational framework has much to offer over the functional style in terms of expressiveness, computing with relations is less efficient, and more semantically troublesome. In...
Making functionality more general (1991)
The notion of functionality is not cast in stone, but depends upon what we have as types in our language. With partial equivalence relations (pers) as types we show that the functional relations are...
Functional Programming With Relations (1991)
While programming in a relational framework has much to offer over the functional style in terms of expressiveness, computing with relations is less efficient, and more semantically troublesome. In...
Functional Programming with Relations (1990)
While programming in a relational framework has much to offer over the functional style in terms of expressiveness, computing with relations is less efficient, and more semantically troublesome. In...
Functional Programming with Relations (1990)
While programming in a relational framework has much to o er over the functional style in terms of expressiveness, computing with relations is less e cient, and more semantically troublesome. In this...