Source code on Github{-# OPTIONS --with-K #-}
module Prelude.Ord.Maybe where
open import Prelude.Init; open SetAsType
open import Prelude.Decidable
open import Prelude.DecEq
open import Prelude.Lift
open import Prelude.Irrelevance.Core
open import Prelude.Ord.Core
open import Prelude.Ord.Dec
open import Prelude.Ord.Irrelevant
module _ {A : Type ℓ} ⦃ _ : Ord A ⦄ where
  instance
    Ord-Maybe : Ord (Maybe A)
    Ord-Maybe = λ where
      ._≤_ → λ where
        nothing  _         → ↑ℓ ⊤
        (just _) nothing   → ↑ℓ ⊥
        (just v) (just v′) → v ≤ v′
      ._<_ → λ where
        nothing  nothing   → ↑ℓ ⊥
        nothing  (just _)  → ↑ℓ ⊤
        (just _) nothing   → ↑ℓ ⊥
        (just v) (just v′) → v < v′
  module _ ⦃ _ : DecOrd A ⦄ where
    instance
      Dec-≤ᵐ : _≤_ {A = Maybe A} ⁇²
      Dec-≤ᵐ {nothing} {_}       .dec = yes it
      Dec-≤ᵐ {just _}  {nothing} .dec = no λ ()
      Dec-≤ᵐ {just x}  {just y}  .dec = x ≤? y
      Dec-<ᵐ : _<_ {A = Maybe A} ⁇²
      Dec-<ᵐ {nothing} {nothing} .dec = no λ ()
      Dec-<ᵐ {nothing} {just _}  .dec = yes it
      Dec-<ᵐ {just _}  {nothing} .dec = no λ ()
      Dec-<ᵐ {just x}  {just y}  .dec = x <? y
      DecOrd-Maybe : DecOrd (Maybe A)
      DecOrd-Maybe = λ where
        .Dec-≤ {x} → Dec-≤ᵐ {x}
        .Dec-< {x} → Dec-<ᵐ {x}
    _≤?ᵐ_ = Decidable² (_≤_ {A = Maybe A}) ∋ _≤?_
    _<?ᵐ_ = Decidable² (_<_ {A = Maybe A}) ∋ _<?_
  module _ ⦃ _ : OrdLaws A ⦄ where instance
    postulate OrdLaws-Maybe : OrdLaws (Maybe A)
  module _ ⦃ _ : ·Ord A ⦄ where instance
    ·Ord-Maybe : ·Ord (Maybe A)
    ·Ord-Maybe = λ where
      .·-≤ {just x}  {just y}  .∀≡ p q → ∀≡ p q
      .·-≤ {nothing} {just _}  .∀≡ _ _ → refl
      .·-≤ {nothing} {nothing} .∀≡ _ _ → refl
      .·-< {just x}  {just y} .∀≡ p q → ∀≡ p q
      .·-< {nothing} {just _} .∀≡ _ _ → refl
module _ {A : Type ℓ} ⦃ _ : Ord⁺⁺ A ⦄ where instance
  Ord⁺⁺-Maybe : Ord⁺⁺ (Maybe A)
  Ord⁺⁺-Maybe = mkOrd⁺⁺