diff options
author | Jason Gross <jagro@google.com> | 2018-06-15 16:03:48 -0400 |
---|---|---|
committer | Jason Gross <jagro@google.com> | 2018-06-15 16:03:48 -0400 |
commit | c6acfd965279da0ea5c0436310750501ba81c07f (patch) | |
tree | dbd432a46407cfbe61434aa248a2587cabba0804 /src/Util/ErrorT.v | |
parent | 7e73cd94d14e36f0fe6f4295984908cb046e1dc7 (diff) |
Add ErrorT monad, and Show class
Diffstat (limited to 'src/Util/ErrorT.v')
-rw-r--r-- | src/Util/ErrorT.v | 23 |
1 files changed, 23 insertions, 0 deletions
diff --git a/src/Util/ErrorT.v b/src/Util/ErrorT.v new file mode 100644 index 000000000..ab8634e2c --- /dev/null +++ b/src/Util/ErrorT.v @@ -0,0 +1,23 @@ +Require Import Crypto.Util.Notations. + +Inductive ErrorT {ErrT T} := +| Success (v : T) +| Error (msg : ErrT). + +Global Arguments ErrorT : clear implicits. +Delimit Scope error_scope with error. +Bind Scope error_scope with ErrorT. + +Definition invert_result {ErrT T} (v : ErrorT ErrT T) + := match v return match v with Success _ => T | _ => ErrT end with + | Success v => v + | Error msg => msg + end. + +Definition bind {A B ErrT} (x : ErrorT ErrT A) (k : A -> ErrorT ErrT B) : ErrorT ErrT B + := match x with + | Success v => k v + | Error msg => Error msg + end. + +Notation "x <- y ; f" := (bind y (fun x => f%error)) : error_scope. |