User:Kowey/HaskellRedesign

The Book
This book is divided into two tracks. The beginner's track (left) will introduce you to the very basics of the language and some of most frequently used libraries. This will enable you to build simple programs and prepare you for the advanced track. The advanced track (right) introduces functional programming concepts like monads, some new features of Haskell, such as Generalised Algebraic Data Types. At the very end of this book, we also have a set of chapters on the more day-to-day issues of working with Haskell, issues such as making use of the stardard library, building graphical interfaces or working with databases. You should be able to jump directly to this chapter from the basic track.

Please contribute! Everyone, regardless of Haskell competency, can help out. Spend five minutes improving a module and save someone else hours of time. Check out the notes for contributors.

{|width="100%" cellspacing="0" cellpadding="0" style="margin-top:0.8em;margin-bottom:0.8em" {|width="100%" cellspacing="0" cellpadding="5" style="background:honeydew"
 * width="50%" valign="top" style="border:1px solid MediumAquamarine;background:honeydew"|


 * style="font-size:95%;"|

Haskell Basics

 * /Getting set up/
 * /Variables and functions/
 * /List basics/
 * /Next steps/
 * /Type basics/
 * /Recursion/
 * /Lists/


 * style="font-size:95%;border-top:1px dashed MediumAquamarine"|
 * style="font-size:95%;border-top:1px dashed MediumAquamarine"|

Elementary Haskell

 * /A Miscellany of Types/
 * /List Processing/
 * /More on functions/
 * /Pattern matching/
 * /Control structures/
 * Understanding Haskell indentation rules


 * style="font-size:95%;border-top:1px dashed MediumAquamarine"|
 * style="font-size:95%;border-top:1px dashed MediumAquamarine"|

Intermediate Haskell

 * /Simple input and output/
 * /Type Declarations/
 * /More on Datatypes/
 * /Class Declarations/
 * /Classes and Types/

{|width="100%" cellspacing="0" cellpadding="5" style="background:#F7F7FF"
 * }
 * style="border:1px solid SlateBlue;background:#F7F7FF"|
 * style="border:1px solid SlateBlue;background:#F7F7FF"|


 * style="font-size:95%"|

Monads

 * /Understanding monads/
 * /Advanced monads/
 * Additive monads (MonadPlus)
 * Transformers - putting monads together
 * Monads in practice




 * style="font-size:95%;border-top:1px dashed SlateBlue"|

Advanced Haskell

 * /Arrows/
 * /Understanding arrows/
 * Continuation passing style
 * /Functional dependencies/
 * /Strictness/
 * /Laziness revisited/


 * style="font-size:95%;border-top:1px dashed SlateBlue"|
 * style="font-size:95%;border-top:1px dashed SlateBlue"|

Fun with Types

 * /Existentially quantified types/
 * /Polymorphism/
 * /Phantom types/
 * Generalised algebraic data types


 * }
 * }

Haskell in Practice
{|width="100%" cellspacing="0" cellpadding="0" style="margin-top:0.8em;margin-bottom:0.8em" {|width="100%" cellspacing="0" cellpadding="5" style="background:cornsilk"
 * width="50%" valign="top" style="border:1px solid gold;background:cornsilk"|


 * style="font-size:95%;"|

Libraries

 * Modules and libraries
 * The Hierarchical Libraries
 * Lists - Arrays - Maybe - Maps
 * Random Numbers

{|width="100%" cellspacing="0" cellpadding="5" style="background:cornsilk"
 * }
 * style="border:1px solid gold;background:cornsilk"|
 * style="border:1px solid gold;background:cornsilk"|


 * style="font-size:95%"|

Tutorials

 * Building a standalone application
 * /Testing and Debugging/
 * Graphical user interfaces
 * Database libraries
 * Distributing your software with the Cabal


 * }
 * }