@@ -2779,14 +2779,17 @@ and translvalue ue (env : EcEnv.env) lvalue =
2779
2779
let ty = ttuple (List. map snd xs) in
2780
2780
Lval (LvTuple xs), ty
2781
2781
2782
- | PLvMap (x , tvi , es ) ->
2782
+ | PLvMap (x , tvi , codom , es ) ->
2783
2783
let tvi = tvi |> omap (transtvi env ue) in
2784
- let codomty = UE. fresh ue in
2784
+ let codom = Option. map (transty tp_relax env ue) codom in
2785
+ let codom = ofdfl (fun () -> UE. fresh ue) codom in
2785
2786
let pv, xty = trans_pv env x in
2786
2787
let e, ety = List. split (List. map (transexp env `InProc ue) es) in
2788
+
2787
2789
let e, ety = e_tuple e, ttuple ety in
2790
+
2788
2791
let name = ([] , EcCoreLib. s_set) in
2789
- let esig = [xty; ety; codomty ] in
2792
+ let esig = [xty; ety; codom ] in
2790
2793
let ops = select_exp_op env `InProc None name ue tvi (esig, None ) in
2791
2794
2792
2795
match ops with
@@ -2801,7 +2804,7 @@ and translvalue ue (env : EcEnv.env) lvalue =
2801
2804
let esig = Tuni. subst_dom uidmap esig in
2802
2805
let esig = toarrow esig xty in
2803
2806
unify_or_fail env ue lvalue.pl_loc ~expct: esig opty;
2804
- LvMap ((p, tys), pv, e, xty), codomty
2807
+ LvMap ((p, tys), pv, e, xty), codom
2805
2808
2806
2809
| [_] ->
2807
2810
let uidmap = UE. assubst ue in
@@ -3063,7 +3066,7 @@ and trans_form_or_pattern env mode ?mv ?ps ue pf tt =
3063
3066
3064
3067
| PFcast (pf , pty ) ->
3065
3068
let ty = transty tp_relax env ue pty in
3066
- let aout = transf env pf in
3069
+ let aout = transf env ~tt: ty pf in
3067
3070
unify_or_fail env ue pf.pl_loc ~expct: ty aout.f_ty; aout
3068
3071
3069
3072
| PFmem _ -> tyerror f.pl_loc env MemNotAllowed
@@ -3554,8 +3557,8 @@ and trans_memtype env ue (pmemtype : pmemtype) : memtype =
3554
3557
List. fold_left add_decl mt pmemtype
3555
3558
3556
3559
(* -------------------------------------------------------------------- *)
3557
- and transexp env mode ue { pl_desc = Expr e ; pl_loc = loc ; } =
3558
- let f = trans_form_or_pattern env (`Expr mode) ue e None in
3560
+ and transexp env ? tt mode ue { pl_desc = Expr e ; pl_loc = loc ; } =
3561
+ let f = trans_form_or_pattern env (`Expr mode) ue e tt in
3559
3562
let m = Option. value ~default: mhr (EcEnv.Memory. get_active env) in
3560
3563
let e =
3561
3564
try
0 commit comments