Very impressive, I’m just wondering
You’ve implemented so many features that I almost wonder wich things are not yet supported?
How much does performance compare with GHC?
Is it better designed than GHC? Easier to modify, less complicated? Does it use the same pipeline?
The worst that can happen without MonoLocalBinds is that you get an unexpected type error and have to add a type signature.
I would have liked to keep MonoLocalBinds, but a lot of packages rely on local bindings to be generalized. Given how reluctant some package maintainers are to accept my changes, I’ve given in.
We made the same no renamer pass in our in-house language at work. Its a very mixed bag – we certainly can get away without it. (But in part because we’ve got a goofy namespacing hack instead of proper modules). Usually it feels good to avoid an extraneous pass, and it simplifies the code. On occasion we have to work around the lack of a renamer with pushing various resolution functionality either down into the parser layer or up into the typechecking and evaluator layers, and sometimes all three, and subtle bugs can be introduced at which point I start cursing about “if only we weren’t too lazy to write a renamer”.