:round_pushpin: Rework monadic-bind into function backpassing.
This is more holistic and less awkward than having monadic bind working only with some pre-defined type. Backpassing work with any function, and can be implemented relatively easily by rewriting the AST on-the-fly.
Also, it is far easier to explain than trying to explain what a monadic bind is, how its behavior differs from type to type and why it isn't generally available for any monadic type.
:round_pushpin: Refactor AssignmentKind to allow backpassing on both let and expect.
The 3rd kind of assignment kind (Bind) is gone and now reflected through a boolean parameter. Note that this parameter is completely erased by the type-checker so that the rest of the pipeline (i.e. code-generation) doesn't have to make any assumption. They simply can't see a backpassing let or expect.
:round_pushpin: Allow backpassing with expect.
:round_pushpin: Fix spans and error reporting for backpassing.
:round_pushpin: Experiment with monadic bind.
:round_pushpin: Rework monadic-bind into function backpassing. This is more holistic and less awkward than having monadic bind working only with some pre-defined type. Backpassing work with any function, and can be implemented relatively easily by rewriting the AST on-the-fly.
Also, it is far easier to explain than trying to explain what a monadic bind is, how its behavior differs from type to type and why it isn't generally available for any monadic type.
:round_pushpin: Refactor AssignmentKind to allow backpassing on both let and expect. The 3rd kind of assignment kind (Bind) is gone and now reflected through a boolean parameter. Note that this parameter is completely erased by the type-checker so that the rest of the pipeline (i.e. code-generation) doesn't have to make any assumption. They simply can't see a backpassing let or expect.
:round_pushpin: Allow backpassing with expect.
:round_pushpin: Fix spans and error reporting for backpassing.