diff --git a/ghc/compiler/parser/hsparser.y b/ghc/compiler/parser/hsparser.y
index 4ca10ea9f05a3c38822817140fb218f160b72887..4abf92699a9dc28d9d297e32fc189e0a9b424161 100644
--- a/ghc/compiler/parser/hsparser.y
+++ b/ghc/compiler/parser/hsparser.y
@@ -1009,9 +1009,11 @@ kexp	:  kexpL
 	|  kexpLno
 	;
 
+/* kexpL = a let expression */
 kexpL	:  letdecls IN exp			{ $$ = mklet($1,$3); }
 	;
 
+/* kexpLno = any other expression more tightly binding than operator application */
 kexpLno	:  LAMBDA
 		{ hsincindent();        /* push new context for FN = NULL;        */
 		  FN = NULL; 	        /* not actually concerned about indenting */
@@ -1199,7 +1201,7 @@ stmts	:  stmt					{ $$ = $1; }
 
 stmt	:  /* empty */				{ $$ = Lnil; }
 	|  letdecls				{ $$ = lsing(mkseqlet($1)); }
-	|  expL					{ $$ = lsing($1); }
+	|  expL					{ $$ = lsing(mkdoexp($1,hsplineno)); }
 	|  {inpat=TRUE;} expLno {inpat=FALSE;} leftexp
 		{ if ($4 == NULL) {
 		      expORpat(LEGIT_EXPR,$2);