Hide the detail of handling context.
Hide detail of building vars of the new type and the new record.
Code sharings
Add tests for Substitute
Add an usefull instance.
Add deriving