@@ -657,10 +657,10 @@ impl<'interner, 'arena> Context<'interner, 'arena> {
657657 for item in elab_order. iter ( ) . copied ( ) . map ( |i| & surface_module. items [ i] ) {
658658 match item {
659659 Item :: Def ( item) => {
660- let ( expr, type_value ) =
660+ let ( expr, r#type ) =
661661 self . synth_fun_lit ( item. range , item. params , item. expr , item. r#type ) ;
662662 let expr_value = self . eval_env ( ) . eval ( & expr) ;
663- let r#type = self . quote_env ( ) . quote ( self . scope , & type_value ) ;
663+ let type_value = self . eval_env ( ) . eval ( & r#type ) ;
664664
665665 self . item_env
666666 . push_definition ( item. label . 1 , type_value, expr_value) ;
@@ -899,13 +899,17 @@ impl<'interner, 'arena> Context<'interner, 'arena> {
899899 & mut self ,
900900 pattern : & Pattern < ByteRange > ,
901901 r#type : Option < & Term < ' _ , ByteRange > > ,
902- ) -> ( CheckedPattern , ArcValue < ' arena > ) {
902+ ) -> ( CheckedPattern , core :: Term < ' arena > , ArcValue < ' arena > ) {
903903 match r#type {
904- None => self . synth_pattern ( pattern) ,
904+ None => {
905+ let ( pattern, type_value) = self . synth_pattern ( pattern) ;
906+ let r#type = self . quote_env ( ) . quote ( self . scope , & type_value) ;
907+ ( pattern, r#type, type_value)
908+ }
905909 Some ( r#type) => {
906910 let r#type = self . check ( r#type, & self . universe . clone ( ) ) ;
907911 let type_value = self . eval_env ( ) . eval ( & r#type) ;
908- ( self . check_pattern ( pattern, & type_value) , type_value)
912+ ( self . check_pattern ( pattern, & type_value) , r#type , type_value)
909913 }
910914 }
911915 }
@@ -970,9 +974,8 @@ impl<'interner, 'arena> Context<'interner, 'arena> {
970974
971975 Vec :: from_iter ( params. iter ( ) . map ( |param| {
972976 let range = param. pattern . range ( ) ;
973- let ( pattern, type_value) =
977+ let ( pattern, r#type , type_value) =
974978 self . synth_ann_pattern ( & param. pattern , param. r#type . as_ref ( ) ) ;
975- let r#type = self . quote_env ( ) . quote ( self . scope , & type_value) ;
976979 let ( name, _) = self . push_local_param ( pattern, type_value) ;
977980
978981 ( range, param. plicity , name, r#type)
@@ -992,8 +995,8 @@ impl<'interner, 'arena> Context<'interner, 'arena> {
992995
993996 match ( surface_term, expected_type. as_ref ( ) ) {
994997 ( Term :: Let ( _, def_pattern, def_type, def_expr, body_expr) , _) => {
995- let ( def_pattern, def_type_value) = self . synth_ann_pattern ( def_pattern , * def_type ) ;
996- let def_type = self . quote_env ( ) . quote ( self . scope , & def_type_value ) ;
998+ let ( def_pattern, def_type , def_type_value) =
999+ self . synth_ann_pattern ( def_pattern , * def_type ) ;
9971000 let def_expr = self . check ( def_expr, & def_type_value) ;
9981001 let def_expr_value = self . eval_env ( ) . eval ( & def_expr) ;
9991002
@@ -1398,8 +1401,8 @@ impl<'interner, 'arena> Context<'interner, 'arena> {
13981401 ( ann_expr, type_value)
13991402 }
14001403 Term :: Let ( _, def_pattern, def_type, def_expr, body_expr) => {
1401- let ( def_pattern, def_type_value) = self . synth_ann_pattern ( def_pattern , * def_type ) ;
1402- let def_type = self . quote_env ( ) . quote ( self . scope , & def_type_value ) ;
1404+ let ( def_pattern, def_type , def_type_value) =
1405+ self . synth_ann_pattern ( def_pattern , * def_type ) ;
14031406 let def_expr = self . check ( def_expr, & def_type_value) ;
14041407 let def_expr_value = self . eval_env ( ) . eval ( & def_expr) ;
14051408
@@ -1494,7 +1497,8 @@ impl<'interner, 'arena> Context<'interner, 'arena> {
14941497 ( fun_type, self . universe . clone ( ) )
14951498 }
14961499 Term :: FunLiteral ( range, params, body_expr) => {
1497- self . synth_fun_lit ( * range, params, body_expr, None )
1500+ let ( expr, r#type) = self . synth_fun_lit ( * range, params, body_expr, None ) ;
1501+ ( expr, self . eval_env ( ) . eval ( & r#type) )
14981502 }
14991503 Term :: App ( range, head_expr, args) => {
15001504 let mut head_range = head_expr. range ( ) ;
@@ -1803,7 +1807,8 @@ impl<'interner, 'arena> Context<'interner, 'arena> {
18031807 Value :: Stuck ( Head :: MetaVar ( _) , _) => {
18041808 let range = ByteRange :: merge ( param. pattern . range ( ) , body_expr. range ( ) ) ;
18051809 let ( expr, r#type) = self . synth_fun_lit ( range, params, body_expr, None ) ;
1806- self . convert ( range, expr, & r#type, expected_type)
1810+ let type_value = self . eval_env ( ) . eval ( & r#type) ;
1811+ self . convert ( range, expr, & type_value, expected_type)
18071812 }
18081813 Value :: Stuck ( Head :: Prim ( Prim :: ReportedError ) , _) => {
18091814 core:: Term :: Prim ( file_range. into ( ) , Prim :: ReportedError )
@@ -1829,7 +1834,7 @@ impl<'interner, 'arena> Context<'interner, 'arena> {
18291834 params : & [ Param < ' _ , ByteRange > ] ,
18301835 body_expr : & Term < ' _ , ByteRange > ,
18311836 body_type : Option < & Term < ' _ , ByteRange > > ,
1832- ) -> ( core:: Term < ' arena > , ArcValue < ' arena > ) {
1837+ ) -> ( core:: Term < ' arena > , core :: Term < ' arena > ) {
18331838 self . local_env . reserve ( params. len ( ) ) ;
18341839 let initial_local_len = self . local_env . len ( ) ;
18351840
@@ -1871,7 +1876,7 @@ impl<'interner, 'arena> Context<'interner, 'arena> {
18711876 ) ;
18721877 }
18731878
1874- ( fun_lit, self . eval_env ( ) . eval ( & fun_type) )
1879+ ( fun_lit, fun_type)
18751880 }
18761881
18771882 fn synth_bin_op (
0 commit comments