Aprende el Lenguaje Haskell


 
Esta guía está dirigida a personas que tengan experiencia en lenguajes de programación imperativa (C, C++, Java, Python...) pero que no hayan programado antes en ningún lenguaje funcional (Haskell, ML, OCaml...). Aunque apuesto que incluso si no tienes experiencia como programador, un tipo inteligente como tú podrá seguir adelante y aprender Haskell.
 


¿Qué es Haskell?
Haskell es un lenguaje perezoso, funcional, de tipo estático de programación con las características del sistema de tipo avanzadas como de rango superior, paramétrica de mayor kinded polimorfismo , monádicos efectos , tipos de datos algebraicos generalizados ( GADT s), flexibles clases de tipos , asociados familias tipo , y Más.

Haskell ghces un portátil , la optimización del compilador con una interfaz de función externa ( FFI ), un backend LLVM y soporte de ejecución sofisticada para la concurrencia , explícita / implícita paralelismo , el tiempo de ejecución de perfiles , etc. Otras herramientas Haskell como criterion, quickcheck, hpc, y haddockde realizar evaluaciones comparativas avanzada, Pruebas basadas en la propiedad, cobertura de código y generación de documentación.

Hackage ofrece una gran cantidad de bibliotecas Haskell de calidad de producción en forma de paquetes Cabal . La cabalherramienta tradicional , o la stackherramienta más reciente (disponible en 7.10.3+) se puede utilizar para simplificar el trabajo con paquetes Cabal. Las principales diferencias se resumen aquí . Se alienta a los nuevos usuarios a comenzar.


Haskell es un lenguaje de programación puramente funcional. En los lenguajes imperativos obtenemos resultados dándole al computador una secuencia de tareas que luego éste ejecutará. Mientras las ejecuta, puede cambiar de estado. Por ejemplo, establecemos la variable a a 5, realizamos algunas tareas y luego cambiamos el valor de la variable anterior. Estos lenguajes poseen estructuras de control de flujo para realizar ciertas acciones varias veces (for, while...). Con la programación puramente funcional no decimos al computador lo que tiene que hacer, sino más bien, decimos como son las cosas. El factorial de un número es el producto de todos los números desde el 1 hasta ese número, la suma de una lista de números es el primer número más la suma del resto de la lista, etc. 

Expresamos la forma de las funciones. Además no podemos establecer una variable a algo y luego establecerla a otra cosa. Si decimos que a es 5, luego no podemos decir que es otra cosa porque acabamos de decir que es 5 ¿Acaso somos unos mentirosos? De este modo, en los lenguajes puramente funcionales, una función no tiene efectos secundarios. Lo único que puede hacer una función es calcular y devolver algo como resultado. 
Al principio esto puede parecer una limitación pero en realidad tiene algunas buenas consecuencias: si una función es llamada dos veces con los mismos parámetros, obtendremos siempre el mismo resultado. A esto lo llamamos transparencia referencial y no solo permite al compilador razonar acerca de el comportamiento de un programa, sino que también nos permite deducir fácilmente (e incluso demostrar) que una función es correcta y así poder construir funciones más complejas uniendo funciones simples.

Haskell es un lenguaje tipificado estáticamente. Cuando compilamos un programa, el compilador sabe que trozos del código son enteros, cuales son cadenas de texto, etc. Gracias a esto un montón de posibles errores son capturados en tiempo de compilación. Si intentamos sumar un número y una cadena de texto, el compilador nos regañará. 

Haskell usa un fantástico sistema de tipos que posee inferencia de tipos. Esto significa que no tenemos que etiquetar cada trozo de código explícitamente con un tipo porque el sistema de tipos lo puede deducir de forma inteligente. La inferencia de tipos también permite que nuestro código sea más general, si hemos creado una función que toma dos números y los suma y no establecemos explícitamente sus tipos, la función aceptará cualquier par de parámetros que actúen como números.

Qué necesitas para comenzar

Un editor de texto y un compilador de Haskell. Probablemente ya tienes instalado tu editor de texto favorito así que no vamos a perder el tiempo con esto. Ahora mismo, los dos principales compiladores de Haskell son GHC (Glasgow Haskell Compiler) y Hugs. Para los propósitos de esta guía usaremos GHC. No voy a cubrir muchos detalles de la instalación. En Windows es cuestión de descargarse el instalador, pulsar “siguiente” un par de veces y luego reiniciar el ordenador. En las distribuciones de Linux basadas en Debian se puede instalar con apt-get o instalando un paquete deb. En MacOS es cuestión de instalar un dmg o utilizar macports. Sea cual sea tu plataforma, aquí tienes más información.

GHC toma un script de Haskell (normalmente tienen la extensión .hs) y lo compila, pero también tiene un modo interactivo el cual nos permite interactuar con dichos scripts. Podemos llamar a las funciones de los scripts que hayamos cargado y los resultados serán mostrados de forma inmediata. Para aprender es mucho más fácil y rápido en lugar de tener que compilar y ejecutar los programas una y otra vez. El modo interactivo se ejecuta tecleando ghci desde tu terminal. Si hemos definido algunas funciones en un fichero llamado, digamos, misFunciones.hs, podemos cargar esas funciones tecleando :l misFunciones, siempre y cuando misFunciones.hs esté en el mismo directorio en el que fue invocado ghci. Si modificamos el script .hs y queremos observar los cambios tenemos que volver a ejecutar :l misFunciones o ejecutar :r que es equivalente ya que recarga el script actual. Trabajaremos definiendo algunas funciones en un fichero .hs, las cargamos y pasamos el rato jugando con ellas, luego modificaremos el fichero .hs volviendo a cargarlo y así sucesivamente. Seguiremos este proceso durante toda la guía.


Sigue Aprendiendo Ingresando al Archivo

 http://tmearn.com/C4zN

No hay comentarios.

Con tecnología de Blogger.