fn parse_let(&mut self) -> Result<Term> {
        self.consume_token(Token::Let)?;
        let ident = self.consume_identifier()?;
        self.consume_token(Token::Equals)?;
        let term1 = self.parse_term()?;
        self.consume_token(Token::In)?;
        let term2 = self.parse_term()?;

        Ok(Term::Let(ident, Box::new(term1), Box::new(term2)))
    }
// let : LET ident = term IN term
let : LET ident = term IN term
let : LET ident = term IN term
fn parse_let(&mut self) -> Result<Term> {
        self.consume_token(Token::Let)?;
        let ident = self.consume_identifier()?;
        self.consume_token(Token::Equals)?;
        let term1 = self.parse_term()?;
        self.consume_token(Token::In)?;
        let term2 = self.parse_term()?;
        Ok(Term::Let(ident, Box::new(term1), Box::new(term2)))
    }
fn parse_let ( & mut self ) -> Result < Term > { self . consume_token ( Token :: Let ) ? ; let ident = self . consume_identifier ( ) ? ; self . consume_token ( Token :: Equals ) ? ; let term1 = self . parse_term ( ) ? ; self . consume_token ( Token :: In ) ? ; let term2 = self . parse_term ( ) ? ; Ok ( Term :: Let ( ident , Box :: new ( term1 ) , Box :: new ( term2 ) ) ) }
let : LET ident = term IN term
let : LET ident = term IN term
&mut self
&mut self