Parse lambda: fun x => body
(&mut self)
| 354 | |
| 355 | /// Parse lambda: fun x => body |
| 356 | fn parse_lambda_expr(&mut self) -> crate::Result<Expr> { |
| 357 | if self.check(&TokenKind::Fun) || self.check(&TokenKind::Lambda) { |
| 358 | let start = self.advance().span; |
| 359 | let params = self.parse_lambda_params()?; |
| 360 | self.expect(TokenKind::FatArrow)?; |
| 361 | let body = Box::new(self.parse_expr()?); |
| 362 | let span = start.to(body.span()); |
| 363 | |
| 364 | Ok(Expr::Lam { span, params, body }) |
| 365 | } else { |
| 366 | self.parse_let_expr() |
| 367 | } |
| 368 | } |
| 369 | |
| 370 | /// Parse lambda parameters (simpler than def params) |
| 371 | fn parse_lambda_params(&mut self) -> crate::Result<Vec<Param>> { |
no test coverage detected