import Lean.Elab.Term open Lean Expr Elab Term elab "lett " decl:letDecl ";" e:term : term <= ty? => do let elabE (ty? : Option Expr) : TermElabM Expr := do elabTerm e ty? elabToSyntax elabE fun body => do elabTerm (← `(let $decl:letDecl; $body)) ty? #guard lett x := 42; (x + 1) = 43