<p dir="ltr">One important feature of guards is that passing a pattern but failing all the guards falls through to the next pattern. Toy example:</p>
<p dir="ltr">maybeGT5 x | x > 5 = Just x<br>
maybeGT5 _ = Nothing</p>
<div class="gmail_quote">On Jul 6, 2016 6:17 PM, "Semih Masat" <<a href="mailto:masat.semih@gmail.com">masat.semih@gmail.com</a>> wrote:<br type="attribution"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">Sorry, if i am flooding.<br><br>To make it clear what i wanted to say in last section on previous mail.<br><br><br><br>Lets say i have a list of numbers and i want to do different things in case of different even numbers on that list.<div><br></div><div>If i use guards i will do it like this :</div><div><br></div><div><div>nums = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17]</div><div>howManyEvens = length(removeOdd(nums))</div><div><br></div><div>isItOk count</div><div>    | count > 10 = "Too much"</div><div>    | count > 8   = "Isn't this a little much?"</div><div>    | count > 5   = "I think this is ok"</div><div>    | count > 3   = "Little more please"</div><div>    | count > 0   = "Ooo, cmon"</div><div>    | otherwise   = "We gonna die"</div><div><br></div><div>result = isItOk howManyEvens</div></div><div style="font-size:12.8px"><span style="font-size:12.8px"><br>This is a very stupid example but this will work i guess.<br><br>And if i wanted to this with <b>case</b> , i will do it like;</span></div><div style="font-size:12.8px"><span style="font-size:12.8px"><br></span></div><div><div style="font-size:12.8px">isItOk' nums = case (length(removeOdd(nums))) of</div><div style="font-size:12.8px">    10  -> "Too much"</div><div style="font-size:12.8px">    8   -> "Isn't this a little much?"</div><div style="font-size:12.8px">    5   -> "I think this is ok"</div><div style="font-size:12.8px">    3   -> "Little more please"</div><div style="font-size:12.8px">    0   -> "Ooo, cmon"</div><div style="font-size:12.8px">    x   -> "i don't even"</div><div style="font-size:12.8px"><br></div><div style="font-size:12.8px">So the only different thing is i didn't need to create <span style="font-size:small"><b>howManyEvens</b></span><span style="font-size:small"><b> </b>constant.</span></div><div style="font-size:12.8px"><span style="font-size:small"><br></span></div><div style="font-size:12.8px"><span style="font-size:small"><br></span></div><div style="font-size:12.8px"><span style="font-size:small">PS: While i writing this. I realized that with case, i need to use pattern matching but with guards i can use other functions if i wanted to. ( like count > 10 )</span></div><div>Sorry for asking prematurely. And if anyone reaches this email by google search. Look at this explanation : <a href="http://stackoverflow.com/a/4156831" target="_blank">http://stackoverflow.com/a/4156831</a></div></div><div><br></div><div>To the authors : Please, if you writing a book a blog post about haskell. Don't create same function in different styles. We don't understand which one we need to use and why we have all different choices. </div><div><br></div><div>Thanks.</div><div>Semih</div><div><br></div><div class="gmail_extra"><div class="gmail_quote">On Thu, Jul 7, 2016 at 3:43 AM, Semih Masat <span dir="ltr"><<a href="mailto:masat.semih@gmail.com" target="_blank">masat.semih@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-style:solid;border-left-color:rgb(204,204,204);padding-left:1ex"><div dir="ltr">Hello,<div><br></div><div>I am new to Haskell and trying to learn it with <a href="http://learnyouahaskell.com" target="_blank">learnyouahaskell.com</a> and Pluralsight Haskell course. </div><div><br></div><div>And i have a very noob question.</div><div><br></div><div>I understand that <b>if .. else</b> is just a syntactic sugar over <b>case. </b>But what about guards then ?</div><div><br></div><div>Are guards also <b>case </b>in different syntax ? Or vice versa ? Like with an example.</div><div><br></div><div><br></div><div><div>anyEven nums</div><div>    | (length (removeOdd nums)) > 0 = True</div><div>    | otherwise                     = False</div><div><br></div><div><br></div><div>anyEven' nums = case (removeOdd nums) of</div><div>    []        -> False</div><div>    (x:xs)  -> True</div></div><div><br></div><div>I can do the same thing with both of them. </div><div><br></div><div>As i understand the only different thing is, with <b>case </b>i can manipulate the parameter (like here in the example i used removeOdd) and can use the manipulated parameter to decide what to do after that. </div><div>So i will not need to use removeOdd function inside the case. ( maybe i will need to use in every guard definition if i choose to use guards )</div><div><br></div><div>Is this it? </div><div><br></div><div>Is this the only difference between them ?</div><div><br></div><div>And if it is, why haskell needed do implement both of them. Can't we use function like removeOdd before using it on case or guard functions ?</div><div><br></div><div><br></div><div>Thanks, and sorry if my english is bad.</div><span><font color="#888888"><div><br></div><div>Semih Masat</div></font></span></div>
</blockquote></div><br></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>