<div dir="ltr">Bob Ippolito, thank you for great explanation! Your suggestion is working.<div><br></div><div>Marcin Mrotek, thank you for additional info.<br><div><br></div><div><br></div></div></div><div class="gmail_extra"><br><div class="gmail_quote">On Sat, Jul 11, 2015 at 9:09 PM, Marcin Mrotek <span dir="ltr"><<a href="mailto:marcin.jan.mrotek@gmail.com" target="_blank">marcin.jan.mrotek@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Hello,<br>
<span class=""><br>
> Does this mean that they do not perform IO, or do IO but "break out<br>
of" / hide their IO using unsafe or something?<br>
<br>
</span>No, monad transformers sort of compose "backwards", that is, if you<br>
have something like FooT (BarT (IO a)) then after running everything,<br>
you'll get something in the lines of IO (Bar (Foo a)). That's why IO,<br>
if it is there at all, must be at the bottom of the stack.<br>
<br>
Now, I don't know the library you're using, from the docs it would<br>
appear that you indeed can runInstagramT without any IO in there, but<br>
some of the actions defined force this or that constraint, and in<br>
particular this "getUserAccessTokenURL2" forces (MonadControlBase IO<br>
m), which is more or less a fancy way of saying that there must be IO<br>
at the bottom.<br>
<br>
Best regards,<br>
Marcin Mrotek<br>
<div class="HOEnZb"><div class="h5">_______________________________________________<br>
Beginners mailing list<br>
<a href="mailto:Beginners@haskell.org">Beginners@haskell.org</a><br>
<a href="http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners" rel="noreferrer" target="_blank">http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners</a><br>
</div></div></blockquote></div><br></div>