Use GADT declarations where it would be useful
Issue #17
new
With GADT (Generalized Algebraic Data types), constructors can include a type constraint (e.g., Eq a, Complex b) which is then available during pattern matching. This contrasts with regular data type declarations where constraints in the constructor require all functions using them to supply the constraint.
Expect this to primarily be of use in the emulator, simplifying some of the constraint code, but may be of use in the assembler as well.