Conditional pipe operator on error tuple

This seems to fix the problem:

  defmacro left ~> right do
    quote do
      case unquote( left ) do
        { :error, _ } = err -> err
        val ->
          val |> unquote( right )
      end
    end
  end