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

  1. 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.

  1. 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.

  1. 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

add :: Int -> Int -> Int
add x y = x + y

En aquest cas, hem especificat explícitament el tipus de la funció add. No obstant això, Haskell podria deduir el tipus automàticament:

add x y = x + y

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

numbers = [1, 2, 3, 4, 5]

Haskell deduirà que numbers és una llista d'enters [Int].

Exemple 3: Funcions d'Ordre Superior

applyTwice f x = f (f x)

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?

  1. double x = x * 2
  2. pair x y = (x, y)
  3. isEven n = n mod 2 == 0

Solucions

  1. double :: Num a => a -> a
  2. pair :: a -> b -> (a, b)
  3. isEven :: Integral a => a -> Bool

Errors Comuns i Consells

Error 1: Tipus Incompatibles

add x y = x + y
-- Error: No instance for (Num [Char]) arising from a use of ‘+’

Solució: Assegura't que els tipus de les variables siguin compatibles amb les operacions que estàs realitzant.

Error 2: Tipus Ambigus

ambiguous x = show x
-- Error: Ambiguous type variable ‘a0’ arising from a use of ‘show’

Solució: Especifica el tipus de la variable per evitar ambigüitats.

ambiguous (x :: Int) = show x

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.

© Copyright 2024. Tots els drets reservats