added data constructor strictness and unpacking