Implement BlockArguments (#10843)

Authored by akio on Jan 31 2018, 8:35 PM.


Implement BlockArguments (Trac #10843)

This patch implements the BlockArguments extension, as proposed at It also
fixes Trac #10855 as a side-effect.

This patch adds a large number of shift-reduce conflicts to the parser.
All of them concern the ambiguity as to where constructs like if and
let end. Fortunately they are resolved correctly by preferring shift.

The patch is based on @gibiansky's ArgumentDo implementation (D1219).

Test Plan: ./validate

Reviewers: goldfire, bgamari, alanz, mpickering

Reviewed By: bgamari, mpickering

Subscribers: Wizek, dfeuer, gibiansky, rwbarton, thomie, mpickering, carter

GHC Trac Issues: Trac #10843, Trac #10855

Differential Revision: