This looks like an interesting problem, but I'm a little confused about
the objective. In what sense is it "faithful"?
> to prevent the computation from gaining unauthorized access to the state.
Does that property have a formal definition? Are we looking for a
one-to-one correspondence between a "better" WriterT and the naive WriterT?
Exactly. They should be isomorphic as sets and "morally" isomorphic as monads. There will of course be distinctions in strictness
What about (w -> s -> s) instead of ((w -> w) -> (s -> s))? It seems
that `pass` needs the (w -> w), but if we leave `pass` aside, does that
still look about right?
Yes. That's the type I started with, and then I got to `pass` and realized it just wouldn't do the trick.