My second semester research project focused slightly more on compiler engineering, namely, how ADTs
were represented internally in our compiler. At the time, data constructors were represented as flat;
they could not be partially applied. Now that we have basic ADTs working, how can we
add partial application of data constructors? Given that we already have closures and partial
applications working for functions, perhaps we could reuse those facilities for ADTs? What is the
difference between a data constructor and a function? Why are they treated differently in our
compiler, and at what point could their representations become synonymous?
I detail the thought process behind my answers to these questions in my Spring 2022 SSLANG Research
Report, as well as summarize other additions to the compiler like my enhancement of our IR pretty
printer.
Research Report
Spring 2022