summaryrefslogtreecommitdiff
path: root/src/PureUtils.ml
diff options
context:
space:
mode:
authorSon Ho2022-04-27 15:47:39 +0200
committerSon Ho2022-04-27 15:47:39 +0200
commit018278ff418da62d1391c5f500def96890602f5a (patch)
treef19b69d79998e1022ad898d4dfc4e319f058f95e /src/PureUtils.ml
parent003d039b5b51619699e96669007f6d095928251c (diff)
Fix various bugs when extracting with a state monad
Diffstat (limited to '')
-rw-r--r--src/PureUtils.ml9
1 files changed, 9 insertions, 0 deletions
diff --git a/src/PureUtils.ml b/src/PureUtils.ml
index bcf93c3c..b87a6346 100644
--- a/src/PureUtils.ml
+++ b/src/PureUtils.ml
@@ -435,6 +435,8 @@ let opt_destruct_result (ty : ty) : ty option =
| Adt (Assumed Result, tys) -> Some (Collections.List.to_cons_nil tys)
| _ -> None
+let destruct_result (ty : ty) : ty = Option.get (opt_destruct_result ty)
+
let opt_destruct_tuple (ty : ty) : ty list option =
match ty with Adt (Tuple, tys) -> Some tys | _ -> None
@@ -469,3 +471,10 @@ let rec destruct_abs_list (e : texpression) : typed_lvalue list * texpression =
let xl, e'' = destruct_abs_list e' in
(x :: xl, e'')
| _ -> ([], e)
+
+let destruct_arrow (ty : ty) : ty * ty =
+ match ty with
+ | Arrow (ty0, ty1) -> (ty0, ty1)
+ | _ -> raise (Failure "Unreachable")
+
+let mk_arrow (ty0 : ty) (ty1 : ty) : ty = Arrow (ty0, ty1)