Results 1 
5 of
5
Fast Mergeable Integer Maps
 In Workshop on ML
, 1998
"... Finite maps are ubiquitous in many applications, but perhaps nowhere more so than in compilers and other language processors. In these applications, three operations on finite maps dominate all others: looking up the value associated with a key, inserting a new binding, and merging two finite maps. ..."
Abstract

Cited by 29 (1 self)
 Add to MetaCart
(Show Context)
Finite maps are ubiquitous in many applications, but perhaps nowhere more so than in compilers and other language processors. In these applications, three operations on finite maps dominate all others: looking up the value associated with a key, inserting a new binding, and merging two finite maps. Most implementations of finite maps in functional languages are based on balanced binary search trees, which perform well on the first two, but poorly on the third. We describe an implementation of finite maps with integer keys that performs well in practice on all three operations. This data structure is not new  indeed, it is thirty years old this year  but it deserves to be more widely known.
An Overview of Edison
 Electronic Notes in Theoretical Computer Science
, 2000
"... Edison is a library of functional data structures implemented in Haskell. It supports three main families of abstractions: sequences, collections (e.g., sets and priority queues), and associative collections (e.g., nite maps). This paper summarizes the design of Edison, with particular attention to ..."
Abstract

Cited by 15 (0 self)
 Add to MetaCart
(Show Context)
Edison is a library of functional data structures implemented in Haskell. It supports three main families of abstractions: sequences, collections (e.g., sets and priority queues), and associative collections (e.g., nite maps). This paper summarizes the design of Edison, with particular attention to how that design is inuenced by details of Haskell. 1 Introduction There is a growing recognition that a useful set of libraries is at least as important to the acceptance of a programming language as the design of the language itself. A library of fundamental data structures such as queues, sets, and nite maps is particularly important in this regard. However, highquality examples of such libraries, such as the STL [14] in C++ or the the collection classes [3] in Smalltalk, are rare. Edison is a library of ecient data structures suitable for implementation and use in functional programming languages. It is named after Thomas Alva Edison and for the mnemonic value of EDiSon (Ecient Data ...
Efficient Data Structures in a Lazy Functional Language
, 2003
"... Although a lot of theoretical work has been done on purely functional data structures, few of them have actually been implemented to general usefulness, let alone as part of a data structure library providing a uniform framework.
In 1998, Chris Okasaki started to change this by implementing Edison, ..."
Abstract
 Add to MetaCart
Although a lot of theoretical work has been done on purely functional data structures, few of them have actually been implemented to general usefulness, let alone as part of a data structure library providing a uniform framework.
In 1998, Chris Okasaki started to change this by implementing Edison, a library of efficient data structures for Haskell.
Unfortunately, he abandoned his work after creating a framework and writing some data structure implementations for parts of it.
This document first gives an overview of the current state of Edison and describes what efficiency in a lazy language means and how to measure it in a way that trades off complexity and precision to produce meaningful results.
These techniques are then applied to give an analysis of the sequence implementations present in Edison. Okasaki only briefly mentions the main characteristics of the data structures he has implemented, but to allow the user to choose the most efficient one for a given task, a more complete analysis seems needed.
To round off Edison's sequence part, four new implementations based on previously known theoretical work are presented and analysed: two deques based on the pairoflists approach, and two data structures that allow constant time appending, while preserving constant time for tail and, for one of them, even init.
To achieve a certain confidence in the correctness of the new implementations, we also present QuickCheck properties that not only check the operations behave as desired by the abstraction, but also allow data structure specific invariants to be tested, while being polymorphic.
[PROGRAMMING LANGUAGES]: Logic Programming General
"... There exist several implementations of the functional logic language Curry: a transformation to Prolog and implementations of abstract machines for C and Java. We show that there are many advantages of a further implementation as a transformation to Haskell: increases in performance, availability o ..."
Abstract
 Add to MetaCart
(Show Context)
There exist several implementations of the functional logic language Curry: a transformation to Prolog and implementations of abstract machines for C and Java. We show that there are many advantages of a further implementation as a transformation to Haskell: increases in performance, availability of libraries and tools, and open access to the implementation. We present the basic ideas and a prototypical implementation of our transformation, which generates Haskell programs without use of impure features.
Sequence Implementations in Haskell
, 1997
"... An abstract data type sequence is defined with the operations empty, isEmpty, cons, snoc, popFront, popRear, lenghtSeq, toList, and toSeq. A sequence with the operations lookupSeq and updateSeq is an Indexable Sequence. A sequence with catenation is called a Catenable Sequence. Some functional imp ..."
Abstract
 Add to MetaCart
(Show Context)
An abstract data type sequence is defined with the operations empty, isEmpty, cons, snoc, popFront, popRear, lenghtSeq, toList, and toSeq. A sequence with the operations lookupSeq and updateSeq is an Indexable Sequence. A sequence with catenation is called a Catenable Sequence. Some functional implementations of these abstract data types taken from the literature are described. These implementations are classified as stacks, deques, flexible arrays, and catenable lists, if they can be used as efficient implementations for each of these traditional data types. Some of them are extended to provide the operations defined for sequences. Some comments and directions for further research are also included. The implementations are made in the functional programming language Haskell as instances of one or more of the classes Sequence, IndSeq, and CatSeq, with the operations defined for each type. These instances are classified by the subset of these operations that each instance supports eff...