fn let_expr(&mut self) -> WeldResult<Box<Expr>> {
        self.consume(TLet)?;
        let name = self.symbol()?;
        let ty = self.optional_type()?;
        self.consume(TEqual)?;
        let mut value = self.operator_expr()?;

        // If a type was found, assign it (even if the value already has a known type).
        // Type inference will catch any type mismatches later on.
        if ty != Unknown {
            value.ty = ty;
        }

        self.consume(TSemicolon)?;
        let body = self.expr()?;
        let expr = expr_box(Let { name, value, body }, Annotations::new());
        Ok(expr)
    }
Parse 'let name = value; body' starting at the current position.
weld/src/syntax/parser.rs