Address the review:

- Remove mutable state by introducing `DeclaredSingletonType`
- Update the spec