-
Getting set upGetting set up Haskell Basics This chapter describes how to install the programs you'll need to start codin
-
Variables and functionsVariables and functions (Solutions) Haskell Basics Getting set up Variables and functions Truth values Type ba
-
Truth valuesTruth values Haskell Basics [edit] In the last chapter, we used the equals sign to define variables and fun
-
Type basicsType basics (Solutions) Haskell Basics In programming, Types are used to group similar values into categori
-
Lists and tuplesHaskell uses two fundamental structures for managing several values: lists and tuples. They both work by grouping multip
-
Type basics IIType basics II Haskell Basics In this chapter, we will show how numerical types are handled in Haskell and
-
Next stepsNext steps (Solutions) Haskell Basics This chapter introduces pattern matching and two new pieces of syntax
-
Building vocabularyBuilding vocabulary Haskell Basics This chapter will be a bit of an interlude with some advice for studying
-
Simple input and outputSimple input and output (Solutions) Haskell Basics Back to the real world[edit] Beyond internally calculati
-
RecursionRecursion (Solutions) Elementary Haskell Recursion plays a central role in Haskell (and computer science an
-
Lists II (map)Lists II (Solutions) Elementary Haskell Earlier, we learned that Haskell builds lists via the cons operator
-
Lists III (folds, comprehensions)Lists III (Solutions) Elementary Haskell Recursion Lists II (map) Lists III (folds, comprehensions) Type decla
-
Type declarationsType declarations (Solutions) Elementary Haskell You're not restricted to working with just the types provi
-
Pattern matchingPattern matching (Solutions) Elementary Haskell In the previous modules, we introduced and made occasional
-
Control structuresControl structures (Solutions) Elementary Haskell Haskell offers several ways of expressing a choice betwee
-
More on functionsMore on functions (Solutions) Elementary Haskell Here are several nice features that make using functions e
-
Higher-order functionsHigher-order functions (Solutions) Elementary Haskell At the heart of functional programming is the idea th
-
Using GHCi effectivelyUsing GHCi effectively Elementary Haskell GHCi assists in several ways toward more efficient work. Here, we
-
ModulesModules Intermediate Haskell Modules are the primary means of organizing Haskell code. We met them in passi
-
Standalone programsStandalone programs Intermediate Haskell Let's build a simple Haskell application, i.e. a piece of standalo
-
IndentationIndentation (Solutions) Intermediate Haskell Haskell relies on indentation to reduce the verbosity of your
-
More on datatypesMore on datatypes Intermediate Haskell Enumerations[edit] One special case of the data declaration is the e
-
Other data structuresOther data structures Intermediate Haskell In this chapter, we will work through examples of how the techni
-
Classes and typesClasses and types Intermediate Haskell Back in Type basics II we had a brief encounter with type classes as
-
The Functor classThe Functor class Intermediate Haskell In this chapter, we will introduce the important Functor type class.
-
Prologue: IO, an applicative functorPrologue: IO, an applicative functor Monads Prologue: IO, an applicative functor Understanding monads Maybe Li
-
Understanding monadsUnderstanding monads Monads There is a certain mystique about monads, and even about the word "monad" itsel
-
MaybeMaybe Monads We introduced monads using Maybe as an example. The Maybe monad represents computations which
-
ListList (Solutions) Monads Lists are a fundamental part of Haskell, and we've used them extensively before get
-
do notationdo notation Monads Using do blocks as an alternative monad syntax was first introduced way back in the Simp
-
IOIO (Solutions) Monads Two defining features of Haskell are pure functions and lazy evaluation. All Haskell
-
StateState (Solutions) Monads If you have programmed in any other language before, you likely wrote some functio
-
Alternative and MonadPlusAlternative and MonadPlus (Solutions) Monads Prologue: IO, an applicative functor Understanding monads Maybe L
-
Monad transformersMonad transformers (Solutions) Monads We have seen how monads can help handling IO actions, Maybe, lists, a
-
MonoidsMonoids (Solutions) Advanced Haskell In earlier parts of the book, we have made a few passing allusions to
-
Applicative functorsApplicative functors (Solutions) Advanced Haskell When covering the vital Functor and Monad type classes, w
-
FoldableFoldable (Solutions) Advanced Haskell The Foldable type class provides a generalisation of list folding (fo
-
TraversableTraversable (Solutions) Advanced Haskell We already have studied four of the five type classes in the Prelu
-
Arrow tutorialArrow tutorial Advanced Haskell Arrows provide an alternative to the usual way of structuring computations
-
Understanding arrowsUnderstanding arrows (Solutions) Advanced Haskell
-
Continuation passing styleContinuation passing style (Solutions) Advanced Haskell Monoids Applicative functors img Foldable Traversable
-
ZippersZippers (Solutions) Advanced Haskell Theseus and the Zipper[edit] The Labyrinth[edit] "Theseus, we have to
-
LensesLenses and functional references (Solutions) Advanced Haskell This chapter is about functional references.
-
Mutable objectsMutable objects Advanced Haskell Functional purity is a defining characteristic of Haskell, one which leads
-
ConcurrencyConcurrency (Solutions) Advanced Haskell Concurrency[edit] Concurrency in Haskell is mostly done with Haske
-
Polymorphism basicsPolymorphism (Solutions) Fun with Types Parametric Polymorphism[edit] Section goal = short, enables reader
-
Existentially quantified typesExistentially quantified types (Solutions) Fun with Types Polymorphism basics img Existentially quantified typ
-
Advanced type classesAdvanced type classes (Solutions) Fun with Types Type classes may seem innocuous, but research on the subje
-
Phantom typesPhantom types (Solutions) Fun with Types Phantom types are a way to embed a language with a stronger type s
-
Generalised algebraic data-types (GADT)img Wikipedia has related information at Generalized algebraic data type GADT (Solutions) Fun with Types
-
Type constructors & KindsKinds (Solutions) Fun with Types Polymorphism basics img Existentially quantified types img Advanced type clas
-
Category theoryCategory theory (Solutions) Wider Theory This article attempts to give an overview of category theory, in s
-
The Curry–Howard isomorphismThe Curry–Howard isomorphism (Solutions) Wider Theory Denotational semantics img Equational reasoning Program
-
fix and recursionFix and recursion (Solutions) Wider Theory The fix function is a particularly weird-looking function when y
-
IntroductionPerformance introduction (Solutions) Haskell Performance Execution Model[edit] [edit] Programming is not on
-
Step by step examplesPerformance examples (Solutions) Haskell Performance Goal: Explain optimizations step by step with examples
-
Graph reductionGraph reduction (Solutions) Haskell Performance Notes and TODOs[edit] TODO: Pour lazy evaluation explanati
-
LazinessLaziness (Solutions) Haskell Performance “ Hard work pays off later. Laziness pays off now! – Steven Wrig
-
Time and space profilingIn every language, profiling is the first crucial step of performance optimization. Otherwise, it is difficult to unders
-
StrictnessStrictness (Solutions) Haskell Performance [edit] Strict evaluation, or eager evaluation, is an evaluation
-
Algorithm complexityAlgorithm complexity (Solutions) Haskell Performance Complexity Theory is the study of how long a program w
-
IntroductionLibraries (Solutions) Libraries Reference Haskell has a rich and growing set of libraries. They fall into s
-
MaybeMaybe (Solutions) Libraries Reference The Maybe data is used with functions that might be unsuccessful. The
-
IOIO (Solutions) Libraries Reference The IO Library[edit] Here, we'll explore the most commonly used elements
-
RandomRandom (Solutions) Libraries Reference
-
Data structures primerData structures primer Libraries Reference This chapter introduces some of the data structures available fr
-
ArraysArrays (Solutions) Libraries Reference Haskell'98 supports just one array constructor type, namely Array, w
-
MapsMaps Libraries Reference The module Data.Map provides the Map datatype, which allows you to store values at
-
DebuggingDebugging General Practices [edit] Debug prints are a common way to debug programs. In imperative languages
-
TestingTesting (Solutions) General Practices Quickcheck[edit] Consider the following function: getList = find 5
-
Packaging your software (Cabal)Packaging General Practices Debugging Testing Packaging your software (Cabal) Using the Foreign Function Inter
-
Using the Foreign Function Interface (FFI)FFI (Solutions) General Practices Debugging Testing Packaging your software (Cabal) Using the Foreign Function
-
Generic programming: Scrap your boilerplateSYB (Solutions) General Practices Debugging Testing Packaging your software (Cabal) Using the Foreign Function
-
Graphical user interfaces (GUI)GUI (Solutions) Specialised Tasks Graphical user interfaces (GUI) img Databases img Working with XML img Parsi
-
File:50%.svgimgSize of this PNG preview of this SVG file: 9 × 9 pixels. Other resolutions: 240 × 240 pixels | 480 × 480 pixels | 600
-
DatabasesDatabase (Solutions) Specialised Tasks Introduction[edit] Haskell's most popular database module is HDBC. H
-
File:00%.svgimgSize of this PNG preview of this SVG file: 9 × 9 pixels. Other resolutions: 240 × 240 pixels | 480 × 480 pixels | 600
-
Working with XMLXML (Solutions) Specialised Tasks There are several Haskell libraries for XML work, and additional ones for
-
Parsing mathematical expressionsParseExps (Solutions) Specialised Tasks Graphical user interfaces (GUI) img Databases img Working with XML img
-
File:100 percent.svgimgSize of this PNG preview of this SVG file: 9 × 9 pixels. Other resolutions: 240 × 240 pixels | 480 × 480 pixels | 600
-
Syntactic sugarSyntactic sugar refers to any redundant type of syntax in a programming language that is redundant to the main syntax bu
-
Answers to exercisesSolutions to exercises. If you have found an answer that isn't in these articles, but you're sure is correct (by testing
-
Authors and AcknowledgementsThe Haskell wikibook combines original material with the content of some previously existing tutorials. We are extremely
-
To doSee also: Category:Haskell/Stubs Cleanups[edit] Haskell/Other data structures - tricky one. While the discussion on
-
Experimental ModulesThis page is an incubator for developing modules which for one reason or another (for instance, for requiring large-scal
-
List of topicsHere is a non-exhaustive list of topics covered by the book modules (as of now, covering the first three chapters). Righ
-
Haskell Meta-tutorialwhat i would like is a meta-tutorial a list of questions about haskell, what does this do, do you understand this etc a
-
Learning HaskellThis portal points to places where you can go if you want to learn Haskell. The Introduction to Haskell on the Haskell
-
What I Wish I Knew When Learning HaskellVersion 2.3 % Stephen Diehl % March 2016 Stephen Diehl ( ) This is the fourth draft of this document. PDF Vers
-
中文img Haskell是一种函数式编程语言。如果学过编程,并想了解Haskell如何工作以及和其它编程语言有何不同,你可以看一下概述。 Haskell有两大特点。第一,它是纯函数性的。如果一个函数在不同的环境下以相同的参数调用两次,那么这两
-
Creative Commons Attribution-ShareAlike License.img You are free to: Adapt — remix, transform, and build upon the material for any purpose, even commercially.