This is a work in progress. In particular, I want to add more tests, especially the compile-fail test is very bare-bones.