- State was not used linearly.
- `TraceState` must be non-backtrackable. That is, we should never use `TraceT (ExceptT E m A)`.
Thus, we add a new instance for lifting MonadTracer.
- Avoid `Thunk`.
Pending issues:
- API is too expensive.
a) We need to create closure.
b) We eagerly create `Message`s even when tracing is disabled.
- `Message` collides with structure defined at `Messages.lean`
- Need convenient way of writing new `MonadTracer` instances.
- `traceRoot` requires a `Position` and a class.
Thus, only modules that have access to `Position` may turn on
tracing. The module `TypeContext` will not have access to position
information, but we want to generate trace messages.
This is just a draft.
```
for f in `find . -name '*.lean'`; do echo $f; gsed "/^import/s/\b\(.\)/\u\1/g" $f > tmp; gsed "/^Import/s/Import/import/g" tmp > $f; done
```