Hspec is a Behaviour-Driven Development tool for Haskell programmers. BDD is an approach
to software development that combines Test-Driven Development, Domain Driven Design, and
Acceptance Test-Driven Planning. Hspec helps you do the TDD part of that equation, focusing
on the documentation and design aspects of TDD.

Hspec (and the preceding intro) are based on the Ruby library RSpec. Much of what applies to
RSpec also applies to Hspec. Hspec ties together descriptions of behavior and examples of
that behavior. The examples can also be run as tests and the output summarises what needs to
be implemented.

The three functions you'll use the most are hspec, describe, and it. Here is an
example of functions that format and unformat phone numbers and the specs for them.

Since the specs are often used to tell you what to implement, it's best to start with
undefined functions. Once we have some specs, then you can implement each behavior
one at a time, ensuring that each behavior is met and there is no undocumented behavior.