Introducció
La inferència de tipus és una característica poderosa de Haskell que permet al compilador deduir automàticament els tipus de les expressions sense necessitat que el programador els especifiqui explícitament. Això fa que el codi sigui més concís i llegible, alhora que manté la seguretat de tipus.
Conceptes Clau
- Tipus Implícits vs. Tipus Explícits
- Tipus Implícits: Haskell pot deduir el tipus d'una expressió sense que el programador l'especifiqui.
- Tipus Explícits: El programador pot especificar el tipus d'una expressió de manera explícita.
- El Sistema de Tipus de Haskell
- Tipus Primitus:
Int
,Float
,Char
,Bool
, etc. - Tipus Compostos: Llistes
[a]
, tuples(a, b)
, etc. - Tipus Paramètrics: Tipus que depenen d'un o més paràmetres, com
Maybe a
,Either a b
.
- El Compilador GHC
- GHC (Glasgow Haskell Compiler) és el compilador més utilitzat per Haskell i és capaç de deduir els tipus de la majoria de les expressions.
Exemples Pràctics
Exemple 1: Inferència de Tipus Bàsica
En aquest cas, hem especificat explícitament el tipus de la funció add
. No obstant això, Haskell podria deduir el tipus automàticament:
El compilador deduirà que add
té el tipus Int -> Int -> Int
basant-se en l'operació de suma.
Exemple 2: Inferència de Tipus en Llistes
Haskell deduirà que numbers
és una llista d'enters [Int]
.
Exemple 3: Funcions d'Ordre Superior
El compilador deduirà que applyTwice
té el tipus (a -> a) -> a -> a
.
Exercicis Pràctics
Exercici 1: Deducció de Tipus
Quin tipus deduirà Haskell per a les següents expressions?
double x = x * 2
pair x y = (x, y)
isEven n = n
mod2 == 0
Solucions
double :: Num a => a -> a
pair :: a -> b -> (a, b)
isEven :: Integral a => a -> Bool
Errors Comuns i Consells
Error 1: Tipus Incompatibles
Solució: Assegura't que els tipus de les variables siguin compatibles amb les operacions que estàs realitzant.
Error 2: Tipus Ambigus
Solució: Especifica el tipus de la variable per evitar ambigüitats.
Resum
En aquesta secció, hem après sobre la inferència de tipus en Haskell, una característica que permet al compilador deduir automàticament els tipus de les expressions. Hem vist exemples pràctics i hem resolt exercicis per reforçar els conceptes apresos. La inferència de tipus fa que el codi sigui més concís i llegible, alhora que manté la seguretat de tipus.
En el següent tema, explorarem les Classes de Tipus, una característica avançada que permet definir comportaments comuns per a diferents tipus de dades.