#### D. A. Turner *Miranda: A Non-Strict Functional Language with
Polymorphic Types*, Proceedings IFIP Conference on Functional
Programming Languages and Computer Architecture, Nancy, France,
September 1985 (Springer Lecture Notes in Computer Science 201:1-16).

**PDF** [133K]
This paper gives a brief overview of Miranda followed by a more detailed
discussion of algebraic and abstract data types. At the time this paper
was written the language had not quite stabilised. These points should be
noted:

1) *Algebraic data types with laws*
were eventually dropped from
the Miranda language.
The argument against having constructors with laws is that they
complicate reasoning about algebraic data types and that what they do
can be accomplished more efficiently by data type abstraction.

2) The paper implies that Miranda has both **list-** and
**set comprehensions**.
The latter were dropped from the language in 1986.
They were misleading as there was no
*set* type - they generated (potentially infinite) lists from which
duplicates had been removed. This proved very inefficient.
The expression on page 3 of the paper which
searches for counter examples to Fermat's Last Theorem would now be written

[ [a,b,c,n] // a,b,c,n <- [3..]; a^n + b^n = c^n ]

The "//" indicates a *diagonalising list comprehension*, which interleaves its
generators (but does not remove duplicates). See
Miranda manual section 13. *Iterative expressions*.
3) In early versions of Miranda guarded equations were written
without an `if` after the comma.