type t =
  | Lt
  | Eq
  | Gt

let of_int n =
  if n < 0 then
    Lt
  else if n = 0 then
    Eq
  else
    Gt

let to_int = function
  | Lt -> -1
  | Eq -> 0
  | Gt -> 1

let to_string = function
  | Lt -> "<"
  | Eq -> "="
  | Gt -> ">"

let neq = function
  | Eq -> false
  | Lt
  | Gt ->
    true

let is_eq = function
  | Eq -> true
  | Lt
  | Gt ->
    false

let min f x y =
  match f x y with
  | Eq
  | Lt ->
    x
  | Gt -> y

let max f x y =
  match f x y with
  | Eq
  | Gt ->
    x
  | Lt -> y
