@@ -382,10 +382,11 @@ where
382382 infer_do ( state, context, * bind, * discard, statements)
383383 }
384384
385- lowering:: ExpressionKind :: Ado { map, apply, statements, expression } => {
385+ lowering:: ExpressionKind :: Ado { map, apply, pure , statements, expression } => {
386386 let Some ( map) = map else { return Ok ( unknown) } ;
387387 let Some ( apply) = apply else { return Ok ( unknown) } ;
388- infer_ado ( state, context, * map, * apply, statements, * expression)
388+ let Some ( pure) = pure else { return Ok ( unknown) } ;
389+ infer_ado ( state, context, * map, * apply, * pure, statements, * expression)
389390 }
390391
391392 lowering:: ExpressionKind :: Constructor { resolution } => {
@@ -658,6 +659,7 @@ fn infer_ado<Q>(
658659 context : & CheckContext < Q > ,
659660 map : lowering:: TermVariableResolution ,
660661 apply : lowering:: TermVariableResolution ,
662+ pure : lowering:: TermVariableResolution ,
661663 statements : & [ lowering:: DoStatement ] ,
662664 expression : Option < lowering:: ExpressionId > ,
663665) -> QueryResult < TypeId >
@@ -666,6 +668,7 @@ where
666668{
667669 let map_type = lookup_term_variable ( state, context, map) ?;
668670 let apply_type = lookup_term_variable ( state, context, apply) ?;
671+ let pure_type = lookup_term_variable ( state, context, pure) ?;
669672
670673 // First, perform a forward pass where variable bindings are
671674 // bound to unification variables and let bindings are checked.
@@ -698,7 +701,7 @@ where
698701
699702 let [ head_statement, tail_statements @ ..] = & ado_statements[ ..] else {
700703 return if let Some ( expression) = expression {
701- infer_expression ( state, context, expression)
704+ check_function_term_application ( state, context, pure_type , expression)
702705 } else {
703706 state. insert_error ( ErrorKind :: EmptyAdoBlock ) ;
704707 Ok ( context. prim . unknown )
0 commit comments