Hey Joe, all,

Got it. Thanks!

An associated question: In programming a local "helper" or "auxilliary" 
function such as dec2bin' in

dec2bin :: Integer -> [Integer]
dec2bin n = dec2bin' n []
            where dec2bin' n acc
                    | n == 0 = acc
                    | otherwise = let r = rem n 2
                                      m = div (n - r) 2
                                  in dec2bin' m (r : acc)

is there any way to assign a type signature to the helper function?

Michael


--- On Sun, 6/28/09, Joe Fredette <jfred...@gmail.com> wrote:

From: Joe Fredette <jfred...@gmail.com>
Subject: Re: [Haskell-cafe] What is an "expected type" ...
To: "michael rice" <nowg...@yahoo.com>
Cc: "Haskell Cafe mailing list" <haskell-cafe@haskell.org>, 
beginn...@haskell.org
Date: Sunday, June 28, 2009, 11:29 AM

When Haskell runs it's type checker, it tries to "guess" the type of each 
function. Thats why you can write:

   map (+1)

and it knows that you're talking about a function of type:

   Num a => [a] -> [a]

Another thing, called 'defaulting' resolves this, but you didn't ask about 
that, so I won't go into it.

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
to resolve ambiguous types the compiler can't, or just for documentation/good 
practice. So when I write:

   foo :: Num a => [a] -> [a]
   foo ls = map (+1) ls

The "expected type" for `foo` is `Num a => [a] -> [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:

   bar :: String
   bar = 'a'

'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:

   --- Method 1
   bar :: Char
   bar = 'a'
   --- Method 2
   bar :: String
   bar = "a"

Can you see why those two changes fix the problem?


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.

/Joe


michael rice wrote:
> as opposed to an "inferred type"?
> 
> Michael
> 
> 
> ------------------------------------------------------------------------
> 
> _______________________________________________
> Haskell-Cafe mailing list
> Haskell-Cafe@haskell.org
> http://www.haskell.org/mailman/listinfo/haskell-cafe
>   


      
_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe

Reply via email to