<p dir="ltr">Hi Zongzhe,</p>
<p dir="ltr">You can indeed write "Maybe a -> a" function easy, because you have Maybe constructors exported for you. But please note that this will lead to non-total function, e.g. it will have to return an error in case of call with Nothing, so you should avoid writing and using functions like this.</p>
<p dir="ltr">IO case is even less safe, since IO is a special monad (its constructor is not exported), and you should want to do something like this even less, but still, you have functions like unsafePerformIO that have type "IO a -> a". But most probably if you need it -- you're doing something wrong.</p>
<p dir="ltr">If you got to "IO a" value -- you should continue writing functions that operate in IO, and if you want to apply pure function to inner value, you can do it like this:</p>
<p dir="ltr">main = do<br>
  i <- ioIntVal<br>
  let newIntVal = myPureIntFunc i<br>
  putStrLn (show i)<br>
</p>
<div class="gmail_quote">1 бер. 2015 01:44, користувач "Zongzhe Yuan" <<a href="mailto:psyzy3@nottingham.ac.uk">psyzy3@nottingham.ac.uk</a>> написав:<br type="attribution"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Hi<br>
i have a question about IO monad.<br>
Sometimes IO do something and return something, i wonder if the return type, for example is IO Int means it will return an int, could i purely fetch the int?<br>
but i fail, i cannot construct a function, i use do notation but i found i must use something to pass the int to another monad.<br>
But i could write a function has the type of Maybe a -> a and it is easily.<br>
Maybe monad and IO monad both instance monad but why i can’t do that?<br>
<br>
<br>
Zongzhe Yuan<br>
<br>
<br>
<br>
This message and any attachment are intended solely for the addressee<br>
and may contain confidential information. If you have received this<br>
message in error, please send it back to me, and immediately delete it.<br>
<br>
Please do not use, copy or disclose the information contained in this<br>
message or in any attachment.  Any views or opinions expressed by the<br>
author of this email do not necessarily reflect the views of the<br>
University of Nottingham.<br>
<br>
This message has been checked for viruses but the contents of an<br>
attachment may still contain software viruses which could damage your<br>
computer system, you are advised to perform your own checks. Email<br>
communications with the University of Nottingham may be monitored as<br>
permitted by UK legislation.<br>
<br>
_______________________________________________<br>
Haskell-Cafe mailing list<br>
<a href="mailto:Haskell-Cafe@haskell.org">Haskell-Cafe@haskell.org</a><br>
<a href="http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe" target="_blank">http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe</a><br>
</blockquote></div>