Expresiones: En casi todos los lenguajes de programación puedes crear expresiones como:
(b * b-4 * a * c) / 2 * a
y puede asignar estas expresiones a variables:
v = (b*b-4*a*c)/2*a
En Haskell, también puede hacer esto, y lo que es más: las expresiones son realmente todo lo que hay, no hay declaraciones.
Funciones: En Python, puede definir una función como
def hello(name):
return "Hello, "+name
En Haskell puedes escribir esto simplemente como:
hello name = "Hello, "++name
Tipos : C tiene tipos, por ejemplo:
int f (int x, int y) {
return x*y+x+y;
}
Haskell tiene tipos mucho más poderosos que C, y se definen en una linea diferente de la función :
f :: Int -> Int -> Int
f x y = x*y+x+y
Listas : En muchos lenguajes, p. Ej. Python, JavaScript, Ruby,… puedes crear listas como:
lst = ["A", "lista", "de", "cadenas"]
Haskell también usa esta sintaxis para listas.
Para unirse a listas, en Python puede escribir
lst = [1,2] + [3,4]
En Haskell esto sería muy similar:
lst = [1,2] ++ [3,4]
Funciones anónimas : En JavaScript puede definir funciones anónimas (funciones sin nombre) como:
var f = function (x, y) {return x * y + x + y};
En Haskell, estas funciones anónimas se denominan funciones lambda y en realidad son la base del lenguaje. Nuevamente, la sintaxis es muy compacta:
f = \x y -> x*y+x+y
\ representa el símbolo lambda.
Funciones de orden superior : Finalmente, en muchos lengujes, las funciones pueden operar sobre funciones. Por ejemplo, en Perl puede modificar los elementos en una lista usando:
map sub ($x){$x*2+1}, [1..10]
Haskell proporciona muchas de las llamadas funciones de orden superior y le permite definir las suyas propias.
map (\x -> x*2+1) [1..10]