# `Unit.Operators`
[🔗](https://github.com/harmont-dev/hyper/blob/main/lib/unit/operators.ex#L1)

Operator overloading for `Unit.Quantity` types.

`use Unit.Operators` in a module to get unit-aware `+`, `-`, `<`, `>`, `<=`,
and `>=`. Operands that are not unit quantities fall straight through to
`Kernel`, so the rest of the module's integer arithmetic and comparisons are
untouched. Equality (`==`) is left as Elixir's native struct equality, which
already does the right thing for these single-field structs.

    defmodule Scheduler do
      use Unit.Operators

      def headroom(total, used), do: total - used         # Information - Information
      def fits?(avail, need), do: need <= avail           # Information <= Information
      def retries(n), do: n + 1                           # plain integers, via Kernel
    end

Combining two different dimensions (`Information` + `Time`), or a quantity
with a bare number, raises `ArgumentError` -- the whole point of the unit
types is that those mistakes do not silently compute.

# `+`

Sum of two quantities of the same dimension (or `Kernel.+/2` for non-units).

# `-`

Difference of two quantities of the same dimension (or `Kernel.-/2` for non-units).

# `<`

Whether `left` is less than `right` (or `Kernel.</2` for non-units).

# `<=`

Whether `left` is at most `right` (or `Kernel.<=/2` for non-units).

# `>`

Whether `left` is greater than `right` (or `Kernel.>/2` for non-units).

# `>=`

Whether `left` is at least `right` (or `Kernel.>=/2` for non-units).

---

*Consult [api-reference.md](api-reference.md) for complete listing*
