∀ {m : Type u → Type v} [inst : Monad m] {α : Type u} (x : OptionT m α) (y : Unit → OptionT m α),
  x.orElse y =
    OptionT.mk do
      let __do_lift ← x
      match __do_lift with
        | some a => pure (some a)
        | x => y ()