For LIGO developers
After the introduction of
E_type_abstraction, we can now keep those abstractions until monomorphisation.
Before this MR, we were removing
E_type_abstraction, and only guiding monomorphisation using the types:
$ docker run --rm -v "$PWD":"$PWD" -w "$PWD" ligolang/ligo:0.47.0 print ast-typed k.mligo const k = lambda (x : a) return lambda (_#10 : b) return x
With this MR, now
E_type_abstraction is kept after checking:
$ ligo print ast-typed k.mligo const k = Λ a -> Λ b -> lambda (x : a) return lambda (_#10 : b) return x
Monomorphisation needs to work by looking into type abstractions instead of the types (
This MR also profits from deduplication pass to simplify monomorphisation (no need to keep track of "current" bound variable).