Los Tipos de Datos Algebraicos (ADTs, por sus siglas en inglés) son una característica fundamental en Haskell que permite definir tipos de datos complejos mediante la combinación de otros tipos. Los ADTs se dividen principalmente en dos categorías: tipos de datos producto y tipos de datos suma.
Tipos de Datos Producto
Los tipos de datos producto combinan varios valores en una sola estructura. Un ejemplo común de un tipo de datos producto es una tupla. En Haskell, podemos definir nuestros propios tipos de datos producto utilizando la palabra clave data
.
Ejemplo: Definición de un Punto en un Plano
En este ejemplo, Punto
es un tipo de datos que contiene dos valores de tipo Float
. Podemos crear valores de tipo Punto
de la siguiente manera:
Acceso a los Componentes
Para acceder a los componentes de un tipo de datos producto, utilizamos la coincidencia de patrones:
distancia :: Punto -> Punto -> Float distancia (Punto x1 y1) (Punto x2 y2) = sqrt ((x2 - x1)^2 + (y2 - y1)^2)
Tipos de Datos Suma
Los tipos de datos suma permiten definir un tipo que puede ser uno de varios valores posibles. Esto es similar a las enumeraciones en otros lenguajes de programación, pero más poderoso porque cada valor puede tener datos asociados.
Ejemplo: Definición de una Figura Geométrica
En este ejemplo, Figura
puede ser un Circulo
con un radio de tipo Float
o un Rectangulo
con dos lados de tipo Float
.
Uso de Tipos de Datos Suma
Podemos crear valores de tipo Figura
y trabajar con ellos utilizando la coincidencia de patrones:
Ejercicio Práctico
Ejercicio 1: Definir un Tipo de Datos Algebraico
Define un tipo de datos algebraico Forma
que puede ser un Cuadrado
con un lado de tipo Float
o un Triangulo
con una base y una altura de tipo Float
.
Solución
Ejercicio 2: Calcular el Área
Escribe una función areaForma
que calcule el área de una Forma
.
Solución
Resumen
En esta sección, hemos aprendido sobre los Tipos de Datos Algebraicos en Haskell, incluyendo:
- Tipos de Datos Producto: Combinan varios valores en una sola estructura.
- Tipos de Datos Suma: Permiten definir un tipo que puede ser uno de varios valores posibles.
Hemos visto cómo definir y utilizar estos tipos de datos, y hemos practicado con ejercicios para reforzar los conceptos aprendidos. En el próximo módulo, exploraremos más sobre el sistema de tipos en Haskell, incluyendo la inferencia de tipos y las clases de tipos.
Curso de Programación en Haskell
Módulo 1: Introducción a Haskell
- ¿Qué es Haskell?
- Configuración del Entorno de Haskell
- Sintaxis Básica y Hola Mundo
- Haskell REPL (GHCi)