It's basically an error-handling scenario. If your function cannot cover that scenario and the client should not reasonably be assumed to make good use of a specific error, inexhaustive matching encodes that well. However, if you want the failure to be part of a function's return value (i.e. able to be handled by the caller), then exhaustive matching with 'else' can satisfy that.