[Haskell-beginners] Why the length function I wrote has such a type signature?

Daniel Fischer daniel.is.fischer at web.de
Thu Nov 11 04:04:58 EST 2010


On Thursday 11 November 2010 09:24:44, 贾旭卿 wrote:
> This is exercise 3.1 of Real World Haskell. I have my length function
> like this:
>
> myLength [] = 0
> myLength (_:xs) = 1 + (myLength xs)
>
> And I assumed the type signature is like this:
> mylength :: [a] -> Num
>
> But when I wrote this into the file and reloaded it into ghci, there is
> an error.
>
> >     The type signature for `mylength' lacks an accompanying binding
> > Failed, modules loaded: none.

That's because you mistyped the function name in the type signature, the 
funcion has an uppercase L, the signature got a lowercase l.
Without that typo, you'd have gotten an error:

    Class `Num' used as a type
    In the type signature for `myLength': myLength :: [a] -> Num

which would probably have helped.

>
> And the type signature given by ghci is
>
> > myLength :: (Num t1) => [t] -> t1
>
> So how can I modify the function to have a type signature like the first
> one?

Jedaï answered that.



More information about the Beginners mailing list