<div dir="ltr"><div class="gmail_extra"><div class="gmail_quote"><div>Hi Mike, </div><div><br></div><div>Thanks for your response. I was aware that 'casting' doesn't really fit in Haskell vocab but for the lack of better word used it.</div><div><br></div><div>My question was however more towards the usage of [Bool] in the 'if' statement of the filterM function.</div><div><br></div><div>More precisely - How does<font face="monospace, monospace"> 'if [True, False] then x else y' </font>work , because when I do this in GHCi it throws up the following error ?</div><div><br></div><div><i>>>Couldn't match expected type `Bool' with actual type `[Bool]'</i></div><div><i><br></i></div><div>Clearly the 'if' construct does not take a list of Boolean but a single Boolean value so how does filterM use it in it's implementation.</div><div><br></div><div>Hope have made myself clear this time.</div><div><br></div><div>Thanks,</div><div>Shishir</div><div><br></div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">From: Mike Meyer <<a href="mailto:mwm@mired.org">mwm@mired.org</a>><br>To: The Haskell-Beginners Mailing List - Discussion of primarily beginner-level topics related to Haskell <<a href="mailto:beginners@haskell.org">beginners@haskell.org</a>><br>Cc: <br>Date: Wed, 22 Apr 2015 04:15:31 -0500<br>Subject: Re: [Haskell-beginners] filterM function<br><div dir="ltr"><div class="gmail_extra"><div class="gmail_quote">On Wed, Apr 22, 2015 at 3:31 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:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex"><div dir="ltr"><div>I still don't quite understand how '<font face="monospace, monospace">flg</font>' being a boolean [] is used in the last <font face="monospace, monospace">'if</font> statement' of implementation because when I try to do the same thing outside in GHCi it fails miserably even though I am casting it to [Int] - </div><div><br></div><div>--</div><div><font face="monospace, monospace">return (if [True, False] then "4" else "3")::[Int]</font></div></div></blockquote><div><br></div><div>"cast" is a misnomer in Haskell. When you add a type to an expression, you aren't changing the type of the expression like a C-style cast, but picking out a type from the set of possible types for that expression.</div><div><br></div><div>Ignoring the if part and and focusing on return, which has a type Monad m => a -> m a. [Int] is equivalent to [] Int, so [] would be the Monad, and a is Int. While 3 can be an Int, "3", can't. So you could do return 3 :: [Int] or equivalently return 3 :: [] Int to get [3], you can't do return "3" :: [Int], because "3" can't be an Int. You can do return "3" :: [String], since "3" is a string. Just to show the range of possibilities, you can do return 3 :: IO Float, and get back 3.0 as an IO action. The monad in the type is IO, and 3 can be interpreted as a Float.</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></div></div>