This commits relaxes the invariants of the Core syntax so that a
top-level variable can be bound to a primitive string literal of type
- Relaxes the invatiants of the Core, and allows top-level bindings whose type is Addr# as long as their RHS is either a primitive string literal or another variable.
- Allows the simplifier and the full-laziness transformer to float out primitive string literals to the top leve.
- Introduces the new StgGenTopBinding type to accomodate top-level Addr# bindings.
- Introduces a new type of labels in the object code, with the suffix "_bytes", for exported top-level Addr# bindings.
- Makes some built-in rules more robust. This was necessary to keep them functional after the above changes.
This is a continuation of D2554.