Skip to content

Commit 7892005

Browse files
committed
UTIL: add utility function for traceresult
1 parent 5810925 commit 7892005

File tree

2 files changed

+22
-0
lines changed

2 files changed

+22
-0
lines changed

CodeHawk/CH/chutil/cHTraceResult.ml

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,19 @@ let tbind ?(msg="") (f: 'a -> 'c traceresult) (r: 'a traceresult) =
8787
| Error e -> Error (msg :: e)
8888

8989

90+
let tbind2
91+
?(msg1="")
92+
?(msg2="")
93+
(f: 'a -> 'b -> 'c traceresult)
94+
(r1: 'a traceresult)
95+
(r2: 'b traceresult): 'c traceresult =
96+
match r1, r2 with
97+
| Ok v1, Ok v2 -> f v1 v2
98+
| Error e1, Ok _ -> Error (msg1 :: e1)
99+
| Ok _, Error e2 -> Error (msg2 :: e2)
100+
| Error e1, Error e2 -> Error (msg1 :: msg2 :: (e1 @ e2))
101+
102+
90103
let tfold ~(ok:'a -> 'c) ~(error:string list -> 'c) (r: 'a traceresult): 'c =
91104
match r with
92105
| Ok v -> ok v

CodeHawk/CH/chutil/cHTraceResult.mli

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -100,6 +100,15 @@ val tbind:
100100
?msg:string -> ('a -> 'c traceresult) -> ('a traceresult) -> 'c traceresult
101101

102102

103+
val tbind2:
104+
?msg1:string
105+
-> ?msg2:string
106+
-> ('a -> 'b -> 'c traceresult)
107+
-> 'a traceresult
108+
-> 'b traceresult
109+
-> 'c traceresult
110+
111+
103112
(** [titer ~ok ~error r] is [ok v] if [r] is [Ok v] and [error e] if [r] is
104113
[Error e].*)
105114
val titer: ok:('a -> unit) -> error:(string list -> unit) -> ('a traceresult) -> unit

0 commit comments

Comments
 (0)