Definición recursiva de datos

Los tipos se pueden definir de forma recursiva, podemos asumir que el caso pertenece pertenece al tipo y tenemos una regla para generar los otros casos

Ejemplo: Multiplos de 5

\[ 5 \in S, x \in S \wedge y \in S \therefore x+y \in S \]

Lista de Booleanos

\[ Nil \in S, x \in \{V,F\} \wedge l \in S, x::l \in S \]
scala> Nil
val res0: collection.immutable.Nil.type = List()

scala> 1 :: Nil
val res1: List[Int] = List(1)

scala> "casita" :: Nil
val res2: List[String] = List(casita)

scala> (1 :: 2 :: Nil) :: Nil
val res3: List[List[Int]] = List(List(1, 2))