@@ -2779,14 +2779,19 @@ and translvalue ue (env : EcEnv.env) lvalue =
27792779 let ty = ttuple (List. map snd xs) in
27802780 Lval (LvTuple xs), ty
27812781
2782- | PLvMap (x , tvi , es ) ->
2782+ | PLvMap (x , tvi , codom , es ) ->
27832783 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
27852786 let pv, xty = trans_pv env x in
27862787 let e, ety = List. split (List. map (transexp env `InProc ue) es) in
2788+
2789+ unify_or_fail env ue (loc x) ~expct: codom (List. hd (List. rev ety));
2790+
27872791 let e, ety = e_tuple e, ttuple ety in
2792+
27882793 let name = ([] , EcCoreLib. s_set) in
2789- let esig = [xty; ety; codomty ] in
2794+ let esig = [xty; ety; codom ] in
27902795 let ops = select_exp_op env `InProc None name ue tvi (esig, None ) in
27912796
27922797 match ops with
@@ -2801,7 +2806,7 @@ and translvalue ue (env : EcEnv.env) lvalue =
28012806 let esig = Tuni. subst_dom uidmap esig in
28022807 let esig = toarrow esig xty in
28032808 unify_or_fail env ue lvalue.pl_loc ~expct: esig opty;
2804- LvMap ((p, tys), pv, e, xty), codomty
2809+ LvMap ((p, tys), pv, e, xty), codom
28052810
28062811 | [_] ->
28072812 let uidmap = UE. assubst ue in
@@ -3063,7 +3068,7 @@ and trans_form_or_pattern env mode ?mv ?ps ue pf tt =
30633068
30643069 | PFcast (pf , pty ) ->
30653070 let ty = transty tp_relax env ue pty in
3066- let aout = transf env pf in
3071+ let aout = transf env ~tt: ty pf in
30673072 unify_or_fail env ue pf.pl_loc ~expct: ty aout.f_ty; aout
30683073
30693074 | PFmem _ -> tyerror f.pl_loc env MemNotAllowed
@@ -3554,8 +3559,8 @@ and trans_memtype env ue (pmemtype : pmemtype) : memtype =
35543559 List. fold_left add_decl mt pmemtype
35553560
35563561(* -------------------------------------------------------------------- *)
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
3562+ and transexp env ? tt mode ue { pl_desc = Expr e ; pl_loc = loc ; } =
3563+ let f = trans_form_or_pattern env (`Expr mode) ue e tt in
35593564 let m = Option. value ~default: mhr (EcEnv.Memory. get_active env) in
35603565 let e =
35613566 try
0 commit comments