El tipo de las listas
El tipo de las listas, con elementos de tipo a, se puede definir por
| 1 |    data Lista a = Nil | Cons a (Lista a) | 
Por ejemplo, la lista [4,2,5] se representa por Cons 4 (Cons 2 (Cons 5 Nil)).
Definir la función
| 1 |    longitud :: Lista a -> Int | 
tal que longitud xs es la longitud de la lista xs. Por ejemplo,
| 1 |    longitud (Cons 4 (Cons 2 (Cons 5 Nil)))  ==  3 | 
Soluciones
A continuación se muestran las soluciones en Haskell y las soluciones en Python.
| 1 2 3 4 5 | data Lista a = Nil | Cons a (Lista a) longitud :: Lista a -> Int longitud Nil         = 0 longitud (Cons _ xs) = 1 + longitud xs | 
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | from dataclasses import dataclass from typing import Generic, TypeVar A = TypeVar("A") @dataclass class Lista(Generic[A]):     pass @dataclass class Nil(Lista[A]):     pass @dataclass class Cons(Lista[A]):     x: A     xs: Lista[A] def longitud(xs: Lista[A]) -> int:     match xs:         case Nil():             return 0         case Cons(_, xs):             return 1 + longitud(xs)     assert False |