The line &quot;isOneOnly oneOnly = True&quot; doesn&#39;t do what you expect here. Basically, it says there are no constraints on the input, and it binds whatever input it gets to a new *local* variable named oneOnly. Thus, it always matches that line of the function, and always returns true. <br>
<br>The problem here is that [1] is a value, not a type that you can match on. If you want to make sure the value is [1], you can do it one of these two ways:<br>isOneOnly x = x == [1]<br><br>or<br><br>isOneOnly x | x == [1] = True<br>
isOneOnly x | otherwise = False<br><br><div class="gmail_quote">Now at this point you may be wondering how functions like this work:<br>factorial 1 = 1<br>factorial n = n * factorial (n-1)<br><br>I just said that you can&#39;t match against values, but against types. What gives? Well, in fact, haskell matches against integers as types of sort, of the structure Succ Int. That is, it treats integers like they were encoded with the following type:<br>
<br>data Nat = Zero | Succ Nat<br><br>Now you can see how it could pattern match against integers, just like it would against other types with data constructors. Anyway, I&quot;m sure this is far more information than you wanted to know.<br>
<br>On Tue, Dec 23, 2008 at 7:45 PM, Raeck Zhao <span dir="ltr">&lt;<a href="mailto:raeck@msn.com">raeck@msn.com</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">




<div>
hi, good ... morning : )<br>I am just confused by the following code<br><br>&gt; oneOnly :: [Int]<br>&gt; oneOnly = [1]<br>&gt; isOneOnly :: [Int] -&gt; Bool<br>&gt; isOneOnly oneOnly = True<br>&gt; isOneOnly tester = False<br>
<br>what I want to do is to define a &#39;type&#39; oneOnly as [1] and use it on <br>the pattern matching in function isOneOnly. But it does not work as<br>I expect:<br><br>When I type<br><br>isOneOnly [1] <br><br>it will be&nbsp; True&nbsp; which is the result I expect but for<br>
<br>is OneOnly [1,2]<br><br>the result keeps True, it seems the second pattern has been ignored,<br>I think I try to achieve the purpose in a wrong way, any suggestion?<br><br>Thanks and Merry Christmas<br><br>Best wishes,<br>
Raeck<br><br><hr>Send e-mail anywhere. No map, no compass. <a href="http://windowslive.com/oneline/hotmail?ocid=TXT_TAGLM_WL_hotmail_acq_anywhere_122008" target="_blank">Get your Hotmail&reg; account now.</a></div>
<br>_______________________________________________<br>
Beginners mailing list<br>
<a href="mailto:Beginners@haskell.org">Beginners@haskell.org</a><br>
<a href="http://www.haskell.org/mailman/listinfo/beginners" target="_blank">http://www.haskell.org/mailman/listinfo/beginners</a><br>
<br></blockquote></div><br>