The new module `Eval3` highlights that the difference between a two-level Reader and a single-level Reader is due to sharing in the `>>=` combinator.
Preprocessor flags now distinguish between the shared and the unshared variant in module `Eval3`.
New function `readerT` for completeness.
Try two-level `Reader` implementation that uses an implicit parameter. Doesn't seem to have much impact on the sharing problem.