[Haskell-beginners] Why the length function I wrote has such a
amazingjxq at gmail.com
Thu Nov 11 03:55:20 EST 2010
myLength :: [a] -> Int
This is the first type signature I wrote. And I changed the Int into Num
ghci tell me it's wrong. This type signature still not work. But the
function's type signature is this:
length :: [a] -> Int
I think my type signature is right but it's not. And I can not find the
2010/11/11 Chaddaï Fouché <chaddai.fouche at gmail.com>
> On Thu, Nov 11, 2010 at 9:24 AM, 贾旭卿 <amazingjxq at gmail.com> wrote:
> > This is exercise 3.1 of Real World Haskell. I have my length function
> > 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
> > error.
> >> The type signature for `mylength' lacks an accompanying binding
> >> Failed, modules loaded: none.
> > 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?
> You can't, since Num isn't a type, it's a typeclass.
> > myLength :: (Num b) => [a] -> b
> means that myLength takes a list of any type and can return any type
> that is an instance of Num (Num being the typeclass of numbers, that
> means that you can do most things you do on numbers, adding them,
> multiplying them, and so on...).
> If you want a simpler type signature, you could use :
> > myLength :: [a] -> Int
> > myLength :: [a] -> Integer
> since Int (32 or 64 bits integer) and Integer are real type that are
> instances of the Num typeclass.
-------------- next part --------------
An HTML attachment was scrubbed...
More information about the Beginners