change structure & add laws for enums

Review by @garyb.