Results 11  20
of
25
Numerical Representations as HigherOrder Nested Datatypes
, 1998
"... Number systems serve admirably as templates for container types: a container object of size n is modelled after the representation of the number n and operations on container objects are modelled after their numbertheoretic counterparts. Binomial queues are probably the first data structure that wa ..."
Abstract

Cited by 5 (2 self)
 Add to MetaCart
Number systems serve admirably as templates for container types: a container object of size n is modelled after the representation of the number n and operations on container objects are modelled after their numbertheoretic counterparts. Binomial queues are probably the first data structure that was designed with this analogy in mind. In this paper we show how to express these socalled numerical representations as higherorder nested datatypes. A nested datatype allows to capture the structural invariants of a numerical representation, so that the violation of an invariant can be detected at compiletime. We develop a programming method which allows to adapt algorithms to the new representation in a mostly straightforward manner. The framework is employed to implement three different container types: binary randomaccess lists, binomial queues, and 23 finger search trees. The latter data structure, which is treated in some depth, can be seen as the main innovation from a datastruct...
Representing Cyclic Structures as Nested Datatypes
"... We show that cyclic structures, i.e., finite or possibly infinite structures with backpointers, unwindable into possibly infinite structures, can be elegantly represented as nested datatypes. This representation is free of the various deficiencies characterizing the more naive representation as mixe ..."
Abstract

Cited by 5 (0 self)
 Add to MetaCart
We show that cyclic structures, i.e., finite or possibly infinite structures with backpointers, unwindable into possibly infinite structures, can be elegantly represented as nested datatypes. This representation is free of the various deficiencies characterizing the more naive representation as mixedvariant datatypes. It is inspired by the representation of lambdaterms as a nested datatype via the de Bruijn notation. 1
Perfect Trees and Bitreversal Permutations
, 1999
"... A famous algorithm is the Fast Fourier Transform, or FFT. An efficient iterative version of the FFT algorithm performs as a first step a bitreversal permutation of the input list. The bitreversal permutation swaps elements whose indices have binary representations that are the reverse of each othe ..."
Abstract

Cited by 4 (2 self)
 Add to MetaCart
A famous algorithm is the Fast Fourier Transform, or FFT. An efficient iterative version of the FFT algorithm performs as a first step a bitreversal permutation of the input list. The bitreversal permutation swaps elements whose indices have binary representations that are the reverse of each other. Using an amortized approach this operation can be made to run in linear time on a randomaccess machine. An intriguing question is whether a lineartime implementation is also feasible on a pointer machine, that is in a purely functional setting. We show that the answer to this question is in the affirmative. In deriving a solution we employ several advanced programming language concepts such as nested datatypes, associated fold and unfold operators, rank2 types, and polymorphic recursion. 1 Introduction A bitreversal permutation operates on lists whose length is n = 2 k for some natural number k and swaps elements whose indices have binary representations that are the reverse of eac...
Coding Recursion a la Mendler (Extended Abstract)
 Department of Computer Science, Utrecht University
, 2000
"... Abstract We advocate the Mendler style of coding terminating recursion schemes as combinators by showing on the example of two simple and much used schemes (courseofvalue iteration and simultaneous iteration) that choosing the Mendler style can sometimes lead to handier constructions than followin ..."
Abstract

Cited by 4 (1 self)
 Add to MetaCart
Abstract We advocate the Mendler style of coding terminating recursion schemes as combinators by showing on the example of two simple and much used schemes (courseofvalue iteration and simultaneous iteration) that choosing the Mendler style can sometimes lead to handier constructions than following the construction style of cata and para like combinators. 1 Introduction This paper is intended as an advert for something we call the Mendler style. This is a not too widely known style of coding terminating recursion schemes by combinators that di ers from the construction style of the famous cata and para combinators (for iteration and primitiverecursion, respectively) [Mal90,Mee92], here called the conventional style. The paper ar...
Disciplined, efficient, generalised folds for nested datatypes
 UNDER CONSIDERATION FOR PUBLICATION IN FORMAL ASPECTS OF COMPUTING
"... Nested (or nonuniform, or nonregular) datatypes have recursive definitions in which the type parameter changes. Their folds are restricted in power due to type constraints. Bird and Paterson introduced generalised folds for extra power, but at the cost of a loss of efficiency: folds may take more ..."
Abstract

Cited by 4 (0 self)
 Add to MetaCart
Nested (or nonuniform, or nonregular) datatypes have recursive definitions in which the type parameter changes. Their folds are restricted in power due to type constraints. Bird and Paterson introduced generalised folds for extra power, but at the cost of a loss of efficiency: folds may take more than linear time to evaluate. Hinze introduced efficient generalised folds to counter this inefficiency, but did so in a pragmatic way: he did not provide categorical or equivalent underpinnings, so did not get the associated universal properties for manipulating folds. We combine the efficiency of Hinze’s construction with the powerful reasoning tools of Bird and Paterson’s.
Generic Operations on Nested Datatypes
, 2001
"... Nested datatypes are a generalisation of the class of regular datatypes, which includes familiar datatypes like trees and lists. They typically represent constraints on the values of regular datatypes and are therefore used to minimise the scope for programmer error. ..."
Abstract

Cited by 4 (0 self)
 Add to MetaCart
Nested datatypes are a generalisation of the class of regular datatypes, which includes familiar datatypes like trees and lists. They typically represent constraints on the values of regular datatypes and are therefore used to minimise the scope for programmer error.
Modules over Monads and Linearity
"... Replace this file with prentcsmacro.sty for your meeting, or with entcsmacro.sty for your meeting. Both can be ..."
Abstract

Cited by 4 (2 self)
 Add to MetaCart
Replace this file with prentcsmacro.sty for your meeting, or with entcsmacro.sty for your meeting. Both can be
Functional programming with structured graphs
 In Proceedings of the 17th ACM SIGPLAN international conference on Functional programming, ICFP ’12
, 2012
"... This paper presents a new functional programming model for graph structures called structured graphs. Structured graphs extend conventional algebraic datatypes with explicit definition and manipulation of cycles and/or sharing, and offer a practical and convenient way to program graphs in functional ..."
Abstract

Cited by 2 (0 self)
 Add to MetaCart
This paper presents a new functional programming model for graph structures called structured graphs. Structured graphs extend conventional algebraic datatypes with explicit definition and manipulation of cycles and/or sharing, and offer a practical and convenient way to program graphs in functional programming languages like Haskell. The representation of sharing and cycles (edges) employs recursive binders and uses an encoding inspired by parametric higherorder abstract syntax. Unlike traditional approaches based on mutable references or node/edge lists, wellformedness of the graph structure is ensured statically and reasoning can be done with standard functional programming techniques. Since the binding structure is generic, we can define many useful generic combinators for manipulating structured graphs. We give applications and show how to reason about structured graphs.
Type Fusion
"... Fusion is an indispensable tool in the arsenal of techniques for program derivation. Less wellknown, but equally valuable is type fusion, which states conditions for fusing an application of a functor with an initial algebra to form another initial algebra. We provide a novel proof of type fusion b ..."
Abstract

Cited by 1 (0 self)
 Add to MetaCart
Fusion is an indispensable tool in the arsenal of techniques for program derivation. Less wellknown, but equally valuable is type fusion, which states conditions for fusing an application of a functor with an initial algebra to form another initial algebra. We provide a novel proof of type fusion based on adjoint folds and discuss several applications: type firstification, type specialisation and tabulation. 1.
HigherOrder Containers
"... Abstract. Containers are a semantic way to talk about strictly positive types. In previous work it was shown that containers are closed under various constructions including products, coproducts, initial algebras and terminal coalgebras. In the present paper we show that, surprisingly, the category ..."
Abstract

Cited by 1 (0 self)
 Add to MetaCart
Abstract. Containers are a semantic way to talk about strictly positive types. In previous work it was shown that containers are closed under various constructions including products, coproducts, initial algebras and terminal coalgebras. In the present paper we show that, surprisingly, the category of containers is cartesian closed, giving rise to a full cartesian closed subcategory of endofunctors. The result has interesting applications syntax. We also show that the category of containers has finite limits, but it is not locally cartesian closed. 1