Parentheses
Use a WriterT to accumulate statements
Clear the scope prior to each method call
Fix subtype logic to look up the class hierarchy
Rename functions
Remove the singleton function since (: []) is probably more familiar
Eliminate trivial function
Organize code
Construct the initial state without record syntax for less line noise
Ignore the result (unit) of compiling a method
Remove ignored return
Avoid a case construct with fromMaybe
Simplify labels
Utilize void
No need to store the AST in SSA.Program
Only store the name of the class in SSA.Class
Replace SSA.Field with String, since nothing else is needed
Fix plural
Store the method name instead of its AST node
No need to derive Functor