On Thu, Aug 29, 2019, 11:42 PM Li-yao Xia <lysxia@gmail.com> wrote:
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.