Protocol which describes ordering relation for pair of types
Accepts struct with fields :left and :right and returns ord value
@type ord() :: :gt | :lt | :eq
@type t() :: t()
@spec compare(t()) :: ord()