# Haskell

Haskell es un lenguaje de programación puramente funcional. Se diferencia de varias formas:
* Haskell es un lenguaje de programación funcional puro. Cuando se invoca una función usando los mismos argumentos devolverá el mismo resultado cada vez.
* Haskell es perezoso. Las evaluaciones se realizan solo cuando es necesario.
* Haskell proporciona un sistema de tipado moderno con características sofisticadas, como clases de tipos y tipos de datos algebraicos generalizados (muy pronto, términos como estos van a sonar bien fuera del lenguaje).
Haskell es divertido de usar porque tratar con funciones puras hace que el código sea mucho más fácil de razonar, y el sistema de tipo avanzado ayuda a detectar errores tontos y profundos.
El objetivo de este libro es introducir al lector, sea este un estudiante o persona interesada en aprender el lenguaje Haskell, en dos aspectos; en primer lugar, al lenguaje Haskell desde las características más básicas a las avanzadas y en segundo lugar a la programación en general. Se insta que los programadores avanzados sean particularmente pacientes con este proceso. Es muy probable que los lenguajes con los que están familiarizados difieran mucho de Haskell, y los hábitos que provienen de esos lenguajes pueden dificultar el proceso de entendimiento de cómo se maneja la sintaxis; Haskell es simple, pero diferente. Aprender a ver el mundo a través de la perspectiva matemática de un programador funcional es una aventura en un mundo nuevo y desafiante, que trae conocimiento valioso más allá de los límites de cualquier lenguaje. Teniendo en cuenta todos estos aspectos, este libro también pretende ser una herramienta y ayuda a la hora de programar en Haskell.

## Descripción general

El libro está dividido en tres secciones: una unidad para principiantes, una unidad avanzada y una sección llamada Haskell en la práctica. La última sección, que cubre casos prácticos de uso, depende únicamente de la unidad para principiantes. Los programadores experimentados pueden leer la descripción general para evaluar rápidamente qué hace que Haskell sea único y diferente de otros lenguajes.

## Unidad para principiantes

Esta sección le presenta los conceptos básicos de Haskell y algunas bibliotecas de uso común. Al final de esta unidad, debería poder escribir programas simples de Haskell. La mayoría de los capítulos incluyen ejercicios, con soluciones, para su práctica.
| Principios básicos de Haskell Preparaciones Variables y funciones Valores de verdad Tipos básicos Listas y tuplas Tipos básicos II Siguientes pasos Construyendo vocabulario Entrada y salida simple | Haskell nivel elemental Plantilla:Capítulo de Haskell/Haskell elemental | Haskell nivel intermedio Plantilla:Capítulo de Haskell/Haskell intermedio | Mónadas Plantilla:Capítulo de Haskell/Mónadas |

## Unidades avanzadas

Esta sección presenta conceptos de programación funcional más amplios, como diferentes estructuras de datos y teoría de tipos. También cubrirá temas más prácticos como la concurrencia.
| Haskell avanzado Plantilla:Capítulo de Haskell/Haskell avanzado | Diversión con tipos Plantilla:Capítulo de Haskell/Diversión con tipos | Teoría ampliada Plantilla:Capítulo de Haskell/Teoría ampliada | Rendimiento de Haskell Plantilla:Capítulo de Haskell/Rendimiento de Haskell |

## Haskell en la práctica

Los problemas cotidianos de trabajar con Haskell incluyen elementos como conocer las bibliotecas estándar, crear interfaces gráficas y trabajar con bases de datos. Debería poder saltar directamente a esta sección desde la unidad para principiantes.
| Bibliotecas de referencia Plantilla:Capítulo de Haskell/Bibliotecas de referencia | Prácticas generales Plantilla:Capítulo de Haskell/Prácticas generales | Tareas especializadas Plantilla:Capítulo de Haskell/Tareas especializadas |

## Apéndices

* Azúcar sintáctico
* Respuestas a ejercicios
* Historia de Haskell
* Implementaciones de Haskell
* Autores y agradecimientos (original en inglés)

## Acerca del libro

* Notas para los contribuyentes
* Convenciones de estilo
* To do
* Plantillas para el wikilibro de Haskell
* Módulos experimentales
* Lista de tópicos

## Otros tutoriales de Haskell

* Haskell Meta-tutorial - the tutorial to find other tutorials
* Learn You a Haskell for Great Good - Tutorial aimed at beginners who may have experience in imperative programming languages but haven't programmed in a functional language before. Freely available online under a CC-BY-NC-SA license; also released as a conventional book.
* Real World Haskell - an O'Reilly book, available online at no charge (CC-BY-NC license). Built around case studies of practical applications.
* Write Yourself a Scheme in 48 Hours - (imported here) An alternate approach to teaching Haskell (and perhaps Scheme), aimed at a more advanced audience (though not necessarily one that knows how to program!)
* Yet Another Haskell Tutorial - (imported here) is aimed at beginners and takes a practical approach to things.

## Recursos adicionales

* Learning Haskell en haskell.org
* What I Wish I Knew When Learning Haskell - A wide-ranging collection of concise summaries of many intermediate and advanced Haskell topics. Released in the public domain.