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

data Punto = Punto Float Float

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:

p1 :: Punto
p1 = Punto 3.0 4.0

p2 :: Punto
p2 = Punto 5.0 12.0

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

data Figura = Circulo Float
            | Rectangulo Float Float

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:

area :: Figura -> Float
area (Circulo r) = pi * r^2
area (Rectangulo l w) = l * w

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

data Forma = Cuadrado Float
           | Triangulo Float Float

Ejercicio 2: Calcular el Área

Escribe una función areaForma que calcule el área de una Forma.

Solución

areaForma :: Forma -> Float
areaForma (Cuadrado l) = l * l
areaForma (Triangulo b h) = (b * h) / 2

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.

© Copyright 2024. Todos los derechos reservados