Library Asm.Util.Monad

Monads for state and failure handling

Set Implicit Arguments.

Require Import Asm.Util.Specif.

Section sig_option.
   Variable T : Set.
   Variable P : T -> Prop.

   Section sig_option_sig_option.
     Variable T' : Set.
     Variable P' : T' -> Prop.

    Definition try_sig_option_sig_option (o : sig_option P) (f : forall x, P x -> sig_option P') :=
      match o with
        | SNone => SNone _
        | SSome x pf => f x pf
      end.
   End sig_option_sig_option.

   Section sig_option_pred_option.
     Variable P' : Prop.

    Definition try_sig_option_pred_option (o : sig_option P) (f : forall x, P x -> pred_option P') :=
      match o with
        | SNone => PNone _
        | SSome x pf => f x pf
      end.
   End sig_option_pred_option.
End sig_option.

Section pred_option.
   Variable P : Prop.

   Section pred_option_sig_option.
     Variable T : Set.
     Variable P' : T -> Prop.

    Definition try_pred_option_sig_option (o : pred_option P) (f : P -> sig_option P') :=
      match o with
        | PNone => SNone _
        | PSome pf => f pf
      end.
   End pred_option_sig_option.

   Section pred_option_pred_option.
     Variable P' : Prop.

    Definition try_pred_option_pred_option (o : pred_option P) (f : P -> pred_option P') :=
      match o with
        | PNone => PNone _
        | PSome pf => f pf
      end.
   End pred_option_pred_option.
End pred_option.

Section sig.
   Variable T : Set.
   Variable P : T -> Prop.

   Section sig_anything.
     Variable T' : Set.

    Definition try_sig_anything (o : sig P) (f : forall x, P x -> T') :=
      match o with
        | exist x pf => f x pf
      end.
   End sig_anything.
End sig.

Notation "x ::: pf <- o ; f" := (try_sig_anything o (fun x => fun pf => f))
  (at level 60, right associativity).
Notation "x ::: pf <- o ;; f" := (try_sig_anything o (fun x => fun pf => f))
  (at level 60, right associativity).

Notation "x <-- o ; f" := (try_pred_option_sig_option o (fun x => f))
  (at level 60, right associativity).
Notation "x <-- o ;; f" := (try_pred_option_pred_option o (fun x => f))
  (at level 60, right associativity).

Notation "x :: pf <- o ; f" := (try_sig_option_sig_option o (fun x => fun pf => f))
  (at level 60, right associativity).
Notation "x :: pf <- o ;; f" := (try_sig_option_pred_option o (fun x => fun pf => f))
  (at level 60, right associativity).

Index
This page has been generated by coqdoc