No it&#x27;s not.<p>The error pattern makes it so that if you pass an error to the function, it just pipes it through and returns the same error. That&#x27;s different than throwing an error, which is what happens when you call a function with the wrong arity.<p>Which is to say, using the function as defined, if verify_cart() returns {:error, err}, and I pipe it to charge_customer(card: foo), then instead of getting the expected {:error, err} value back out, instead a %FunctionClauseError exception is thrown.<p>On the other hand, if it were defined as<p><pre><code>  def charge_customer({:error, err}, _), do: {:error, err}
</code></pre>
then I would get the expected {:error, err} back out.