Book Image

Soar with Haskell

By : Tom Schrijvers
Book Image

Soar with Haskell

By: Tom Schrijvers

Overview of this book

With software systems reaching new levels of complexity and programmers aiming for the highest productivity levels, software developers and language designers are turning toward functional programming because of its powerful and mature abstraction mechanisms. This book will help you tap into this approach with Haskell, the programming language that has been leading the way in pure functional programming for over three decades. The book begins by helping you get to grips with basic functions and algebraic datatypes, and gradually adds abstraction mechanisms and other powerful language features. Next, you’ll explore recursion, formulate higher-order functions as reusable templates, and get the job done with laziness. As you advance, you’ll learn how Haskell reconciliates its purity with the practical need for side effects and comes out stronger with a rich hierarchy of abstractions, such as functors, applicative functors, and monads. Finally, you’ll understand how all these elements are combined in the design and implementation of custom domain-specific languages for tackling practical problems such as parsing, as well as the revolutionary functional technique of property-based testing. By the end of this book, you’ll have mastered the key concepts of functional programming and be able to develop idiomatic Haskell solutions.
Table of Contents (23 chapters)
Free Chapter
1
Part 1:Basic Functional Programming
6
Part 2: Haskell-Specific Features
11
Part 3: Functional Design Patterns
16
Part 4: Practical Programming

Enumerations

We start with one of the simplest use cases of ADTs, which are often called enumerations, or enums for short. An enumeration type is a type with a finite number of distinct values. Many programming languages provide specific support for enums, but in Haskell, they are just a special case of ADTs and not especially distinguished from other ADTs.

A game of rock-paper-scissors

We illustrate the use of enumeration types with the well-known game of rock-paper-scissors.

Rock-paper-scissors is a two-player game. There are three possible outcomes for the first player (and likewise for the second player) – lose, draw, or win:

data Outcome = Lose | Draw | Win

The data keyword signals that this is the definition of a new datatype. Next comes the name of the new datatype, Outcome. Finally, the possible values are enumerated: Lose, Draw, and Win. These values are called data constructors, value constructors, or constructors for short. Observe that both the names...