Preparatory steps for common subexpressions elimination optimisation. Part 1
Description
This PR makes initial steps for #130 (moved) , especially two main things which it introduces: frontend Freer monad for Indigo code, and hiding input and output stacks from external types (from the Freer monad). A bit motivation: it's impossible to make any under hood manipulation with stack (which are necessary for optimisations) when output stack is exposed (see more explanation in commit messages), so we have to hide them first.
Also, this changes resolve #40 (closed) (which was under consideration, but it happened to have to be done before further progress with #130 (moved)).
Resolves #40 (closed)
✅ Checklist for your Merge Request
Related changes (conditional)
-
Tests (see short guidelines)
-
If I added new functionality, I added tests covering it. -
If I fixed a bug, I added a regression test to prevent the bug from silently reappearing again.
-
-
Documentation
Stylistic guide (mandatory)
-
My commits comply with the following policy. -
My code complies with the style guide.
Edited by Ilya Peresadin