Introduction
Dans un langage de programmation, un type récursif ou type inductif est un type de données pour des valeurs qui contiennent d'autres valeurs du même type.
Un exemple est le type liste en Haskell :
data List a = Nil | Cons a (List a)
Cela spécifie que la liste de a est soit une liste vide ou un cellule cons contenant un a (la "tête" de liste) et une autre liste (la "queue" de liste). Note : a est une variable de type, ce qui fait cette expression utilise du polymorphisme paramétrique.
La récursion n'est pas permise en Miranda ou les types synonymes en Haskell, donc les types Haskell suivants sont illégaux :
type Bad = (Int, Bad) type Evil = Bool -> Evil
Mais, les types de données algébriques apparemment équivalent sont pourtant acceptables :
data Good = Pair Int Good data Fine = Fun (Bool->Fine)