The author includes a perfect (if unintentional) example of why Haskell programs <i>shouldn't</i> use `error`. (If you're writing a quick-and-dirty program? Fair enough. But not in larger programs.)<p>He defines a `Lattice` class, and explains that if a type implements the `Lattice` class, it supports all the operations within the `Lattice` class.<p>He then presents an implementation of the `Lattice` class that <i>doesn't</i> support all the `Lattice` operations (`top` punts to `error`). It breaks the promise, breaks the contract, <i>undermines the guarantees</i> the type system gives you.<p>So don't use `error` in Haskell. (And for that matter, don't use other partial functions such as `head` and `tail`.)