{-# OPTIONS --cubical --safe #-}

module Data.Binary.Order where

open import Prelude
open import Data.Binary.Definition

infix 4 _≲ᴮ_&_
_≲ᴮ_&_ : 𝔹  𝔹  Bool  Bool
0ᵇ    ≲ᴮ ys    & true  = true
0ᵇ    ≲ᴮ 0ᵇ    & false = false
0ᵇ    ≲ᴮ 1ᵇ ys & false = true
0ᵇ    ≲ᴮ 2ᵇ ys & false = true
1ᵇ xs ≲ᴮ 0ᵇ    & s     = false
1ᵇ xs ≲ᴮ 1ᵇ ys & s     = xs ≲ᴮ ys & s
1ᵇ xs ≲ᴮ 2ᵇ ys & s     = xs ≲ᴮ ys & true
2ᵇ xs ≲ᴮ 0ᵇ    & s     = false
2ᵇ xs ≲ᴮ 1ᵇ ys & s     = xs ≲ᴮ ys & false
2ᵇ xs ≲ᴮ 2ᵇ ys & s     = xs ≲ᴮ ys & s

infix 4 _≤ᴮ_ _<ᴮ_
_≤ᴮ_ : 𝔹  𝔹  Bool
xs ≤ᴮ ys = xs ≲ᴮ ys & true

_<ᴮ_ : 𝔹  𝔹  Bool
xs <ᴮ ys = xs ≲ᴮ ys & false

infix 4 _≤_ _<_
_≤_ : 𝔹  𝔹  Type
xs  ys = T (xs ≤ᴮ ys)

_<_ : 𝔹  𝔹  Type
xs < ys = T (xs <ᴮ ys)