<div dir="auto"><div><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Thu, Aug 29, 2019, 11:42 PM Li-yao Xia <<a href="mailto:lysxia@gmail.com">lysxia@gmail.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">This looks like an interesting problem, but I'm a little confused about <br>
the objective. In what sense is it "faithful"?<br>
<br>
 > to prevent the computation from gaining unauthorized access to the state.<br>
<br>
Does that property have a formal definition? Are we looking for a <br>
one-to-one correspondence between a "better" WriterT and the naive WriterT?<br></blockquote></div></div><div dir="auto"><br></div><div dir="auto">Exactly. They should be isomorphic as sets and "morally" isomorphic as monads. There will of course be distinctions in strictness </div><div dir="auto"><br></div><div dir="auto"><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<br>
What about (w -> s -> s) instead of ((w -> w) -> (s -> s))? It seems <br>
that `pass` needs the (w -> w), but if we leave `pass` aside, does that <br>
still look about right?<br></blockquote></div></div><div dir="auto"><br></div><div dir="auto">Yes. That's the type I started with, and then I got to `pass` and realized it just wouldn't do the trick.</div></div>