HOME

TheInfoList



OR:

In
computer science Computer science is the study of computation, automation, and information. Computer science spans theoretical disciplines (such as algorithms, theory of computation, information theory, and automation) to practical disciplines (includi ...
, polymorphic recursion (also referred to as MilnerMycroft typability or the Milner–Mycroft calculus) refers to a
recursive Recursion (adjective: ''recursive'') occurs when a thing is defined in terms of itself or of its type. Recursion is used in a variety of disciplines ranging from linguistics to logic. The most common application of recursion is in mathematics ...
parametrically polymorphic
function Function or functionality may refer to: Computing * Function key, a type of key on computer keyboards * Function model, a structured representation of processes in a system * Function object or functor or functionoid, a concept of object-oriente ...
where the type parameter changes with each recursive invocation made, instead of staying constant.
Type inference Type inference refers to the automatic detection of the type of an expression in a formal language. These include programming languages and mathematical type systems, but also natural languages in some branches of computer science and linguistic ...
for polymorphic recursion is equivalent to semi-unification and therefore undecidable and requires the use of a semi-algorithm or programmer-supplied type annotations.


Example


Nested datatypes

Consider the following nested datatype: data Nested a = a :<: (Nested , Epsilon infixr 5 :<: nested = 1 :<: ,3,4:<: 5,6 ,9 :<: Epsilon A length function defined over this datatype will be polymorphically recursive, as the type of the argument changes from Nested a to Nested /code> in the recursive call: length :: Nested a -> Int length Epsilon = 0 length (_ :<: xs) = 1 + length xs Note that
Haskell Haskell () is a general-purpose, statically-typed, purely functional programming language with type inference and lazy evaluation. Designed for teaching, research and industrial applications, Haskell has pioneered a number of programming lan ...
normally infers the
type signature In computer science, a type signature or type annotation defines the inputs and outputs for a function, subroutine or method. A type signature includes the number, types, and order of the arguments contained by a function. A type signature is typ ...
for a function as simple-looking as this, but here it cannot be omitted without triggering a type error.


Higher-ranked types


Applications


Program analysis

In type-based program analysis polymorphic recursion is often essential in gaining high precision of the analysis. Notable examples of systems employing polymorphic recursion include Dussart, Henglein and Mossin's binding-time analysis and the Tofte–Talpin
region-based memory management In computer science, region-based memory management is a type of memory management in which each allocated object is assigned to a region. A region, also called a zone, arena, area, or memory context, is a collection of allocated objects that ca ...
system. As these systems assume the expressions have already been typed in an underlying type system (not necessary employing polymorphic recursion), inference can be made decidable again.


Data structures, error detection, graph solutions

Functional programming In computer science, functional programming is a programming paradigm where programs are constructed by applying and composing functions. It is a declarative programming paradigm in which function definitions are trees of expressions that ...
data structures often use polymorphic recursion to simplify type error checks and solve problems with nasty "middle" temporary solutions that devour memory in more traditional data structures such as trees. In the two citations that follow, Okasaki (pp. 144–146) gives a CONS example in
Haskell Haskell () is a general-purpose, statically-typed, purely functional programming language with type inference and lazy evaluation. Designed for teaching, research and industrial applications, Haskell has pioneered a number of programming lan ...
wherein the polymorphic type system automatically flags programmer errors. The recursive aspect is that the type definition assures that the outermost constructor has a single element, the second a pair, the third a pair of pairs, etc. recursively, setting an automatic error finding pattern in the data type. Roberts (p. 171) gives a related example in
Java Java (; id, Jawa, ; jv, ꦗꦮ; su, ) is one of the Greater Sunda Islands in Indonesia. It is bordered by the Indian Ocean to the south and the Java Sea to the north. With a population of 151.6 million people, Java is the world's mos ...
, using a
Class Class or The Class may refer to: Common uses not otherwise categorized * Class (biology), a taxonomic rank * Class (knowledge representation), a collection of individuals or objects * Class (philosophy), an analytical concept used differentl ...
to represent a stack frame. The example given is a solution to the
Tower of Hanoi The Tower of Hanoi (also called The problem of Benares Temple or Tower of Brahma or Lucas' Tower and sometimes pluralized as Towers, or simply pyramid puzzle) is a mathematical game or puzzle consisting of three rods and a number of disks of v ...
problem wherein a stack simulates polymorphic recursion with a beginning, temporary and ending nested stack substitution structure.


See also

* Higher-ranked polymorphism


Notes


Further reading

* * * * * * * Richard Bird and Lambert Meertens (1998)
"Nested Datatypes"
* C. Vasconcellos, L. Figueiredo, C. Camarao (2003).
Practical Type Inference for Polymorphic Recursion: an Implementation in Haskell
. ''Journal of Universal Computer Science''. * L. Figueiredo, C. Camarao.
Type Inference for Polymorphic Recursive Definitions: a Specification in Haskell
. *


External links



by Hans Leiß,
University of Munich The Ludwig Maximilian University of Munich (simply University of Munich or LMU; german: Ludwig-Maximilians-Universität München) is a public research university in Munich, Germany. It is Germany's sixth-oldest university in continuous operatio ...
{{Infobox software Polymorphism (computer science) Recursion Object-oriented programming