<div dir="ltr"><div class="gmail_default" style="font-family:georgia,serif;font-size:small">Shishir,</div><div class="gmail_default" style="font-family:georgia,serif;font-size:small"><br></div><div class="gmail_default" style="font-family:georgia,serif;font-size:small">I'll reply as an humble programmer, not a category theorist. For me the clarifying example was to contrast</div><div class="gmail_default" style="font-family:georgia,serif;font-size:small"><br></div><blockquote style="margin:0px 0px 0px 40px;border:none;padding:0px"><div class="gmail_default" style="font-size:small"><font face="monospace, monospace">putStrLn (getLine ++ getLine)</font></div></blockquote><div class="gmail_default" style="font-family:georgia,serif;font-size:small"><br></div><div class="gmail_default" style="font-family:georgia,serif;font-size:small">with</div><div class="gmail_default" style="font-family:georgia,serif;font-size:small"><br></div><blockquote style="margin:0px 0px 0px 40px;border:none;padding:0px"><div class="gmail_default" style="font-size:small"><font face="monospace, monospace">s = square 3 + square 4</font></div></blockquote><div class="gmail_default" style="font-family:georgia,serif;font-size:small"><br></div><div class="gmail_default" style="font-family:georgia,serif;font-size:small">where</div><div class="gmail_default" style="font-family:georgia,serif;font-size:small"><br></div><blockquote style="margin:0px 0px 0px 40px;border:none;padding:0px"><div class="gmail_default" style="font-size:small"><font face="monospace, monospace">square x = x * x</font></div></blockquote><div class="gmail_default" style="font-family:georgia,serif;font-size:small"><br></div><div class="gmail_default" style="font-size:small"><span style="font-family:georgia,serif">There is absolutely nothing that "leaks" between the two sub-expressions involving </span><font face="monospace, monospace">square</font><font face="georgia, serif">, so I'm free to rewrite as:</font></div><div class="gmail_default" style="font-size:small"><font face="georgia, serif"><br></font></div><blockquote style="margin:0px 0px 0px 40px;border:none;padding:0px"><div class="gmail_default" style="font-size:small"><font face="monospace, monospace">a = square 3</font></div><div class="gmail_default" style="font-size:small"><font face="monospace, monospace">b = square 4</font></div><div class="gmail_default" style="font-size:small"><font face="monospace, monospace">s = a + b</font></div></blockquote><div class="gmail_default" style="font-size:small"><font face="georgia, serif"><br></font></div><div class="gmail_default" style="font-size:small"><font face="georgia, serif">or</font></div><div class="gmail_default" style="font-size:small"><font face="georgia, serif"><br></font></div><blockquote style="margin:0px 0px 0px 40px;border:none;padding:0px"><div class="gmail_default" style="font-size:small"><div class="gmail_default"><font face="monospace, monospace">b = square 4</font></div></div><div class="gmail_default" style="font-size:small"><div class="gmail_default"><font face="monospace, monospace">a = square 3</font></div></div><div class="gmail_default" style="font-size:small"><div class="gmail_default"><font face="monospace, monospace">s = a + b</font></div></div></blockquote><div class="gmail_default" style="font-size:small"><div><font face="georgia, serif"><br></font></div></div><div class="gmail_default" style="font-size:small"><font face="georgia, serif">or</font></div><div class="gmail_default" style="font-size:small"><font face="georgia, serif"><br></font></div><blockquote style="margin:0px 0px 0px 40px;border:none;padding:0px"><div class="gmail_default" style="font-size:small"><font face="monospace, monospace">x = square 7</font></div><div class="gmail_default" style="font-size:small"><div class="gmail_default"><span style="font-family:monospace,monospace">b = square 4</span><br></div></div><div class="gmail_default" style="font-size:small"><div class="gmail_default"><div class="gmail_default"><font face="monospace, monospace">a = square 3</font></div></div><div class="gmail_default"></div><div class="gmail_default"><font face="monospace, monospace">s = a + b</font></div></div><div class="gmail_default" style="font-size:small"><div class="gmail_default"><div class="gmail_default"><div class="gmail_default"><font face="monospace, monospace">y = square 8</font></div></div><div class="gmail_default"></div></div></div></blockquote><div class="gmail_default" style="font-size:small"><div class="gmail_default"><font face="georgia, serif"><br></font></div><div><font face="georgia, serif">or</font></div><div><font face="georgia, serif"><br></font></div></div><blockquote style="margin:0px 0px 0px 40px;border:none;padding:0px"><div class="gmail_default" style="font-size:small"><div><font face="monospace, monospace">hh m n = square m + square n</font></div></div><div class="gmail_default" style="font-size:small"><div><font face="monospace, monospace">x = square 7</font></div></div><div class="gmail_default" style="font-size:small"><div><font face="monospace, monospace">s = hh 3 4</font></div></div><div class="gmail_default" style="font-size:small"><div><font face="monospace, monospace">y = square 8</font></div></div></blockquote><div class="gmail_default" style="font-size:small"><div><font face="georgia, serif"><br></font></div><div><font face="georgia, serif">without altering the value of </font><font face="monospace, monospace">s</font><font face="georgia, serif"> or any surrounding computation. In that last case, I can now freely intermingle uses of </font><font face="monospace, monospace">hh</font><font face="georgia, serif"> and </font><font face="monospace, monospace">square</font><font face="georgia, serif"> without risk.</font></div><div><font face="georgia, serif"><br></font></div><div><font face="georgia, serif">But if I were to attempt the same gymnastics with </font><font face="monospace, monospace">putStrLn</font><font face="georgia, serif"> and </font><font face="monospace, monospace">getLine</font><font face="georgia, serif">, I wouldn't have those freedoms. The order of evaluation/performance now becomes critical.</font></div><div><font face="georgia, serif"><br></font></div><div><font face="georgia, serif">So the monad provides a way to manage the composition, and the type system ensures visibility to the fact that something more is going on when a defined function includes IO behavior.</font></div><div><font face="georgia, serif"><br></font></div><div><font face="georgia, serif">Hope that helps,</font></div><div><font face="georgia, serif">-jn-</font></div><div><font face="georgia, serif"><br></font></div></div><div class="gmail_default" style="font-size:small"><br></div><div class="gmail_default" style="font-family:georgia,serif;font-size:small"><br></div><div class="gmail_default" style="font-family:georgia,serif;font-size:small"><br></div><div class="gmail_default" style="font-family:georgia,serif;font-size:small"><br></div></div><div class="gmail_extra"><br><div class="gmail_quote">On Sun, Apr 26, 2015 at 4:59 AM, Shishir Srivastava <span dir="ltr"><<a href="mailto:shishir.srivastava@gmail.com" target="_blank">shishir.srivastava@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"><div>Hi, </div><div><br></div><div>Can someone please explain how IO operations do not fit in the pure category of mathematical function in that they have to be implemented via Monads.</div><div><br></div><div>For e.g. the <font face="monospace, monospace">getLine </font>function has the type <font face="monospace, monospace">IOString </font><font face="arial, helvetica, sans-serif">and it reads the input from the user. Now as I see it the output of getLine will always be same if the input remain same (i.e. for input "X" </font><font face="monospace, monospace">getLine </font><font face="arial, helvetica, sans-serif">will always return "X" ) which is the constraint on mathematical functions.</font></div><div><font face="arial, helvetica, sans-serif"><br></font></div><div><font face="arial, helvetica, sans-serif">Therefore I don't see why monads are necessary for implementing IO in pure languages.</font></div><div><font face="arial, helvetica, sans-serif"><br></font></div><div><font face="arial, helvetica, sans-serif">I can understand why </font><font face="monospace, monospace">Date </font><font face="arial, helvetica, sans-serif">and </font><font face="monospace, monospace">Random </font><font face="arial, helvetica, sans-serif">functions have be implemented via monads because their output will always change.</font></div><div><font face="arial, helvetica, sans-serif"><br></font></div><div><font face="arial, helvetica, sans-serif">Thanks,</font></div><div><div><div dir="ltr"><font color="#0b5394"><font style="background-color:rgb(255,255,255)"><font size="2" face="georgia, serif">Shishir </font></font></font><br></div></div></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" target="_blank">http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners</a><br>
<br></blockquote></div><br><br clear="all"><div><br></div>-- <br><div class="gmail_signature">Beauty of style and harmony and grace and good rhythm depend on simplicity. - Plato</div>
</div>