© 2020 Strange Loop
What would you get if you combined a cutting edge, state of the art macro system with a tried and true, industrial-strength type system? The answer is Hackett, a programming language that embeds the power of the Haskell type system within the Racket macro system. Traditional approaches to macro-enabled Haskells have been relatively straightforward, bolting a macroexpander onto the frontend of an otherwise mundane compiler, but this is a shallow, unsatisfying embedding--by its very nature, the typechecker does not run until macroexpansion is complete, so the wealth of static information embedded in the type system is inaccessible to macro authors. In contrast, Hackett applies and extends recent research first published at POPL 2017 that enables interleaving macroexpansion and typechecking, opening up entirely new ways for programmers to tinker with their language and construct embedded DSLs.
While Hackett is still in development, it is already starting to bear fruit as a vehicle to explore this relatively unexplored design space. In this talk, we will take a look at some real Hackett code to get a feel for what the language is like, survey some of the underlying Racket technologies that make a sampling of Hackett's features possible, and also discuss some of the ways Hackett is likely to grow and develop in the near future. Finally, we'll compare and contrast Hackett's approach to metaprogramming with other approaches in the design space to see what makes Hackett unique.
Alexis is a programmer and programming language hobbyist turned academic who currently works with Northwestern University's programming languages group, where she mostly writes Racket and tinkers with macros and macro systems. She previously worked as a professional Haskell developer, where she focused on taking advantage of extensible effect systems to improve the resiliency of automated test suites. She has been working on Hackett in her free time since late 2016, though she has been dreaming of something like it for much longer.