module Stdlib.Data.Maybe;

open import Stdlib.Data.Maybe.Base public;

import Stdlib.Trait.Eq as Eq;
open Eq using {Eq};

import Stdlib.Trait.Ord as Ord;
open Ord using {Ord};

import Stdlib.Trait.Show as Show;
open Show using {Show};

open import Stdlib.Data.Bool.Base;
open import Stdlib.Data.String.Base;

module MaybeTraits;
  Eq : {A : Type} -> Eq A -> Eq (Maybe A);
  Eq (Eq.mkEq eq) :=
    Eq.mkEq
      λ {
        | nothing nothing := true
        | (just a1) (just a2) := eq a1 a2
        | _ _ := false
      };
  
  Show : {A : Type} -> Show A -> Show (Maybe A);
  Show (Show.mkShow show) :=
    Show.mkShow
      λ {
        | nothing := "nothing"
        | (just a) := "just " ++str show a
      };
  
  Ord : {A : Type} -> Ord A -> Ord (Maybe A);
  Ord (Ord.mkOrd cmp) :=
    Ord.mkOrd
      λ {
        | nothing nothing := Ord.EQ
        | (just a1) (just a2) := cmp a1 a2
        | nothing (just _) := Ord.LT
        | (just _) nothing := Ord.GT
      };

end;
Last modified on 2023-05-08 11:40 UTC