<table cellspacing="0" cellpadding="0" border="0" ><tr><td valign="top" style="font: inherit;">Hey Joe, all,<br><br>Got it. Thanks!<br><br>An associated question: In programming a local "helper" or "auxilliary" function such as dec2bin' in<br><br><span style="font-family: courier,monaco,monospace,sans-serif;">dec2bin :: Integer -&gt; [Integer]</span><br style="font-family: courier,monaco,monospace,sans-serif;"><span style="font-family: courier,monaco,monospace,sans-serif;">dec2bin n = dec2bin' n []</span><br style="font-family: courier,monaco,monospace,sans-serif;"><span style="font-family: courier,monaco,monospace,sans-serif;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; where dec2bin' n acc</span><br style="font-family: courier,monaco,monospace,sans-serif;"><span style="font-family:
 courier,monaco,monospace,sans-serif;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; | n == 0 = acc</span><br style="font-family: courier,monaco,monospace,sans-serif;"><span style="font-family: courier,monaco,monospace,sans-serif;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; | otherwise = let r = rem n 2</span><br style="font-family: courier,monaco,monospace,sans-serif;"><span style="font-family: courier,monaco,monospace,sans-serif;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; m = div (n - r) 2</span><br style="font-family: courier,monaco,monospace,sans-serif;"><span style="font-family:
 courier,monaco,monospace,sans-serif;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; in dec2bin' m (r : acc)</span><br style="font-family: courier,monaco,monospace,sans-serif;"><br>is there any way to assign a type signature to the helper function?<br><br>Michael<br><br><br>--- On <b>Sun, 6/28/09, Joe Fredette <i>&lt;jfredett@gmail.com&gt;</i></b> wrote:<br><blockquote style="border-left: 2px solid rgb(16, 16, 255); margin-left: 5px; padding-left: 5px;"><br>From: Joe Fredette &lt;jfredett@gmail.com&gt;<br>Subject: Re: [Haskell-cafe] What is an "expected type" ...<br>To: "michael rice" &lt;nowgate@yahoo.com&gt;<br>Cc: "Haskell Cafe mailing list" &lt;haskell-cafe@haskell.org&gt;, beginners@haskell.org<br>Date: Sunday, June 28, 2009, 11:29 AM<br><br><div class="plainMail">When Haskell runs it's type
 checker, it tries to "guess" the type of each function. Thats why you can write:<br><br>&nbsp;&nbsp;&nbsp;map (+1)<br><br>and it knows that you're talking about a function of type:<br><br>&nbsp;&nbsp;&nbsp;Num a =&gt; [a] -&gt; [a]<br><br>Another thing, called 'defaulting' resolves this, but you didn't ask about that, so I won't go into it.<br><br>An expected type is one that you provide to the compiler in the form of a type signature, this can be used to specialize a general type (like the one I showed) or<br>to resolve ambiguous types the compiler can't, or just for documentation/good practice. So when I write:<br><br>&nbsp;&nbsp;&nbsp;foo :: Num a =&gt; [a] -&gt; [a]<br>&nbsp;&nbsp;&nbsp;foo ls = map (+1) ls<br><br>The "expected type" for `foo` is `Num a =&gt; [a] -&gt; [a]`. I imagine you're asking this because you got an error which said your expected type doesn't match your inferred type. That might, for instance, happen if I
 wrote:<br><br>&nbsp;&nbsp;&nbsp;bar :: String<br>&nbsp;&nbsp;&nbsp;bar = 'a'<br><br>'a' has type `Char`, since `String` is not `Char`, the type checker infers that 'a' has type char, but _expects_ it to be type String. Two solutions are as follows:<br><br>&nbsp;&nbsp;&nbsp;--- Method 1<br>&nbsp;&nbsp;&nbsp;bar :: Char<br>&nbsp;&nbsp;&nbsp;bar = 'a'<br>&nbsp;&nbsp;&nbsp;--- Method 2<br>&nbsp;&nbsp;&nbsp;bar :: String<br>&nbsp;&nbsp;&nbsp;bar = "a"<br><br>Can you see why those two changes fix the problem?<br><br><br>Also, just as a matter of process, I forwarded this to the haskell-beginners list, as I imagine type errors like these come up a lot, and someone probably has a better explanation over there.<br><br>/Joe<br><br><br>michael rice wrote:<br>&gt; as opposed to an "inferred type"?<br>&gt; <br>&gt; Michael<br>&gt; <br>&gt; <br>&gt; ------------------------------------------------------------------------<br>&gt; <br>&gt;
 _______________________________________________<br>&gt; Haskell-Cafe mailing list<br>&gt; <a ymailto="mailto:Haskell-Cafe@haskell.org" href="/mc/compose?to=Haskell-Cafe@haskell.org">Haskell-Cafe@haskell.org</a><br>&gt; <a href="http://www.haskell.org/mailman/listinfo/haskell-cafe" target="_blank">http://www.haskell.org/mailman/listinfo/haskell-cafe</a><br>&gt;&nbsp;&nbsp;&nbsp;</div></blockquote></td></tr></table><br>