Structural polymorphism is a generic programming technique known within the functional programming community under the names of polytypic or datatype-generic programming. In this thesis we show that such a technique conflicts with the principle of data abstraction and propose a solution for reconciliation. More concretely, we show that popular polytypic extensions of the functional programming language Haskell, namely, Generic Haskell and Scrap your Boilerplate have their genericity limited by data abstraction. We propose an extension to the Generic Haskell language where the `structure' in `structural polymorphism' is defined around the concept of interface and not the representation of a type.
|
3853
|
Design Patterns: Elements of Reusable Object-Oriented Software
– Gamma, Helm, et al.
- 1995
|
|
1295
|
The C++ Programming Language
– Stroustrup
- 1991
|
|
1122
|
Introduction to Functional Programming
– Bird, Wadler
- 1988
|
|
870
|
The Lambda Calculus. Its Syntax and Semantics
– Barendregt
- 1984
|
|
755
|
A Theory of Objects
– Abadi, Cardelli
- 1996
|
|
719
|
On understanding types, data abstraction, and polymorphism
– Cardelli, Wegner
- 1985
|
|
554
|
Notions of computation and monads
– Moggi
- 1991
|
|
389
|
Types and Programming Languages
– Pierce
- 2002
|
|
388
|
Denotational Semantics: The Scott-Strachey Approach to Programming Language Theory
– Stoy
- 1977
|
|
353
|
The formulas-as-types notion of construction
– Howard
|
|
338
|
ML for the Working Programmer
– Paulson
- 1991
|
|
304
|
Towards a theory of type structure
– Reynolds
- 1974
|
|
280
|
How to make ad-hoc polymorphism less ad-hoc
– Wadler, Blott
- 1989
|
|
254
|
The Calculi of Lambda-Conversion
– Church
- 1941
|
|
251
|
Foundations for Programming Languages
– Mitchell
- 1996
|
|
250
|
Functional programming with bananas, lenses, envelopes and barbed wire
– Meijer, Fokkinga, et al.
- 1991
|
|
246
|
An initial algebra approach to the specification, correctness, and implementation of abstract data types’, in: Current Trends in Programming Methodology, edited by R.T
– Goguen, Thatcher, et al.
|
|
244
|
Why functional programming matters
– Hughes
- 1989
|
|
242
|
Compiling polymorphism using intensional type analysis
– HARPER, MORRISETT
- 1995
|
|
224
|
Definitional interpreters for higher-order programming languages
– Reynolds
- 1972
|
|
224
|
Theorems for free
– Wadler
- 1989
|
|
198
|
Interpretation fonctionnelle et elimination des coupures de l'arithmetique d'ordre superieur. These d'Etat, Universite de Paris VII
– Girard
- 1972
|
|
183
|
Order Sorted Algebra I: Equational deduction for Multiple
– Goguen, Meseguer
- 1992
|
|
168
|
Type Systems
– Cardelli
- 1997
|
|
162
|
A system of constructor classes: overloading and implicit higher-order polymorphism
– Jones
- 1995
|
|
156
|
Purely functional data structures
– Okasaki
- 1998
|
|
150
|
Functionality in Combinatory Logic
– Curry
- 1934
|
|
147
|
Principals of Programming Languages
– Tennent
- 1981
|
|
138
|
The Next 700 Programming Languages
– Landin
- 1966
|
|
132
|
Fundamental Concepts in Programming Languages
– Strachey
- 1967
|
|
129
|
Basic Category Theory for Computer Scientists
– Pierce
- 1993
|
|
124
|
Functional programming and parallel graph rewriting
– Plasmeijer, Eekelen
- 1993
|
|
123
|
Type inference with polymorphic recursion
– Henglein
- 1993
|
|
112
|
Qualified Types: Theory and Practice
– Jones
- 1992
|
|
104
|
A Fold for All Seasons
– Sheard, Fegaras
- 1993
|
|
104
|
Views: A way for pattern matching to cohabit with data abstraction
– WADLER
- 1987
|
|
97
|
An Introduction to Object-Oriented Programming
– Budd
- 1991
|
|
95
|
The Act of Creation
– Koestler
- 1964
|
|
94
|
Type classes in Haskell
– Hall, Hammond, et al.
- 1996
|
|
84
|
Abstract Data Types and the Development of Data Structures
– Guttag
- 1977
|
|
83
|
Polytypic values possess polykinded types. Science of computer programming
– Hinze
- 2002
|
|
83
|
Putting type annotations to work
– Odersky, Läufer
- 1996
|
|
82
|
The view from the left
– McBride, McKinna
|
|
79
|
STL Tutorial and Reference Guide
– Musser, Saini
- 1996
|
|
78
|
Computability, an Introduction to Recursive Function Theory
– Cutland
- 1980
|
|
77
|
Generic programming — an introduction
– Backhouse, Jansson, et al.
- 1999
|
|
75
|
Scrap your boilerplate: a practical design pattern for generic programming
– Lämmel, Jones, et al.
- 2003
|
|
74
|
Type classes: Exploring the design space
– Jones, Jones, et al.
- 1997
|
|
74
|
Polymorphic type schemes and recursive definitions
– Mycroft
- 1984
|
|
72
|
Bananas in space: Extending fold and unfold to exponential types. Pages 324–333 of: Fpca95: Conference on functional programming languages and computer architecture
– Meijer, Hutton
- 1995
|