Also: forgot the evolution into its final form, which is a list of rule objects.
A practical example:
Your program starts out accepting a config file that looks like this:
enableLogging: true
Then it changes into: logLevel: WARN
Then that becomes: logging: {
level: WARN
file: system.log
}
Then: logging:
fileLogger: {
level: WARN
file: system.log
}
And finally: logging:
- fileLogger: {
level: WARN
file: system.log
}
- consoleLogger: {
level: DEBUG
}