One useful way of specifying how a function is defined is to describe what results it will
return given different types of inputs. A powerful way of describing "different types of
inputs" in Haskell is using pattern matching. We can provide multiple definitions of a
function, each having a particular pattern for input arguments. The first listed definition
that succeeds in matching a given function call is the one used for that call. In this