En casi todos los lenguajes de programación puede crear expresiones como:
(b * b-4 * a * c) / 2 * a
y puedes asignar estas expresiones a variables:
v = (b * b-4 * a * c) / 2 * a
En Haskell, también puedes hacer esto, y lo que es más: las expresiones son realmente todo lo que hay, no hay declaraciones.
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
C tiene tipos, por ejemplo:
int f (int x, int y) {
return x*y+x+y;
}
Haskell tiene un sistema de tipos mucho más poderosos que C, y hablaremos mucho sobre los tipos:
f :: Int -> Int -> Int
f x y = x*y+x+y
En muchos lenguajes, como Python, JavaScript, Ruby, ... puedes crear listas como:
lst = ["A", "lista", "de", "cadenas"]
Haskell también usa esta sintaxis para las listas.
Para unir listas, en Python podrías escribir
lst = [1,2] + [3,4]
En Haskell esto sería muy similar:
lst = [1,2] ++ [3,4]
En JavaScript puede definir funciones anónimas (funciones sin nombre) como:
var f = función (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
Finalmente, en muchos lenguaje, las funciones pueden operar en 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 estas llamadas funciones de orden superior y le permite definir las suyas propias.
map (\x -> x*2+1) [1..10]