<div dir="ltr">Great question! Many libraries use a monad transformer stack on top of IO rather than a direct IO interface. This can be convenient if you are also using such a stack, but it certainly complicates things a bit if you're just in IO directly.<div><br></div><div>If you follow the error messages it says that it's expecting your Monad to have an instance of MonadResource. IO does not (or else it would've just worked). This means that you'll need to find a monad transformer that provides MonadResource. By looking at the name "<span style="font-size:12.8000001907349px">Control.Monad.Trans.Resource.</span><span style="font-size:12.8000001907349px">Internal.MonadResource" I know that I should probably start looking for something called "</span><span style="font-size:12.8000001907349px">Control.Monad.Trans.Resource". After a bit of searching on Hackage I found <a href="http://hackage.haskell.org/package/resourcet" target="_blank">http://hackage.haskell.org/package/resourcet</a></span></div><div><span style="font-size:12.8000001907349px"><br></span></div><div><span style="font-size:12.8000001907349px">The relevant function is `runResourceT` (most monad transformers are going to have a similarly named run function to "unwrap" a transformer): <a href="http://hackage.haskell.org/package/resourcet-1.1.5/docs/Control-Monad-Trans-Resource.html#v:runResourceT" target="_blank">http://hackage.haskell.org/package/resourcet-1.1.5/docs/Control-Monad-Trans-Resource.html#v:runResourceT</a></span></div><div><br></div><div>Something like this should compile:</div><div><br></div><div><div>{-# LANGUAGE OverloadedStrings #-}</div><div><br></div><div>import Network.HTTP.Client</div><div>import Instagram</div><div>import Control.Monad.Trans.Resource</div><div><br></div><div>code = "xxx_some_code"</div><div>redirectUrl = "<a href="http://localhost:9988/instagram/oauth2/callback">http://localhost:9988/instagram/oauth2/callback</a>"</div><div>credentials = Credentials "xxx_some_api_id" "xxx_some_api_secret"</div><div><br></div><div>main :: IO ()</div><div>main = do</div><div>    manager <- newManager defaultManagerSettings</div><div>    token <- runResourceT . runInstagramT credentials manager $</div><div>        getUserAccessTokenURL2 redirectUrl code</div><div>    print token</div></div><div><br></div><div><br></div><div><span style="font-size:12.8000001907349px"><br></span></div><div><span style="font-size:12.8000001907349px"><br></span></div></div><div class="gmail_extra"><br><div class="gmail_quote">On Sat, Jul 11, 2015 at 5:16 AM, René Klačan <span dir="ltr"><<a href="mailto:rene.klacan@gmail.com" target="_blank">rene.klacan@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">Hi all,<div><br></div><div>I've been trying to create working example with "ig" <a href="https://hackage.haskell.org/package/ig-0.2.2" target="_blank">https://hackage.haskell.org/package/ig-0.2.2</a> - library over instagram API and I am facing little monad problem.</div><div><br></div><div>Can someone advise me please how to make this small piece of code work?</div><div><br></div><div><div>{-# LANGUAGE OverloadedStrings #-}</div><div><br></div><div>import Network.HTTP.Client</div><div>import Instagram</div><div><br></div><div>code = "xxx_some_code"</div><div>redirectUrl = "<a href="http://localhost:9988/instagram/oauth2/callback" target="_blank">http://localhost:9988/instagram/oauth2/callback</a>"</div><div>credentials = Credentials "xxx_some_api_id" "xxx_some_api_secret"</div><div><br></div><div>main :: IO ()</div><div>main = do</div><div>    manager <- newManager defaultManagerSettings</div><div>    token <- runInstagramT credentials manager $</div><div>        getUserAccessTokenURL2 redirectUrl code</div><div>    print token</div></div><div><br></div><div><br></div><div><br></div><div>I am getting following error:</div><div><br></div><div><br></div><div><div>src/Main.hs:14:9:</div><div>    No instance for (Control.Monad.Trans.Resource.Internal.MonadResource</div><div>                       IO)</div><div>      arising from a use of ‘getUserAccessTokenURL2’</div><div>    In the second argument of ‘($)’, namely</div><div>      ‘getUserAccessTokenURL2 redirectUrl code’</div><div>    In a stmt of a 'do' block:</div><div>      token <- runInstagramT credentials manager</div><div>               $ getUserAccessTokenURL2 redirectUrl code</div><div>    In the expression:</div><div>      do { manager <- newManager defaultManagerSettings;</div><div>           token <- runInstagramT credentials manager</div><div>                    $ getUserAccessTokenURL2 redirectUrl code;</div><div>           print token }</div></div><div><br></div><div><br></div><div><br></div><div>Thanks</div><div><br></div><div>Rene</div></div>
<br>_______________________________________________<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>
<br></blockquote></div><br></div>