[Haskell-cafe] Why is Haskell flagging this?

michael rice nowgate at yahoo.com
Sat Dec 18 01:28:10 CET 2010


Hi, all.

Plenty of answers. Thank you.

Putting the list in the IO monad was deliberate. Another one I was looking at was

f :: String -> IO String
f s = do return s

main = do ios <- f "hello"
          fmap tail ios

which worked fine

So, the big error was trying to add  1 + [1,2,3,4,5].

I considered that I needed an additional fmap and thought I had tried

fmap (fmap (1+)) iol

but must have messed it up, because I got an error. I guess I was on the right track.

I like to try various combinations to test my understanding. It's kind of embarrassing when I get stumped by something simple like this, but that's how one learns.

Thanks again,

Michael

--- On Fri, 12/17/10, Daniel Fischer <daniel.is.fischer at googlemail.com> wrote:


    From: Daniel Fischer <daniel.is.fischer at googlemail.com>
    Subject: Re: [Haskell-cafe] Why is Haskell flagging this?
    To: haskell-cafe at haskell.org
    Cc: "michael rice" <nowgate at yahoo.com>
    Date: Friday, December 17, 2010, 4:24 PM

    On Friday 17 December 2010 18:04:20, michael rice wrote:
    > I don't understand this error message. Haskell appears not to understand
    > that 1 is a Num.
    >
    > Prelude> :t 1
    > 1 :: (Num t) => t
    > Prelude> :t [1,2,3,4,5]
    > [1,2,3,4,5] :: (Num t) => [t]
    > Prelude>
    >
    > Michael
    >
    > ===================
    >
    > f :: [Int] -> IO [Int]
    > f lst = do return lst
    >
    > main = do let lst = f [1,2,3,4,5]
    >           fmap (+1) lst

    The fmap is relative to IO, your code is equivalent to

    do let lst = (return [1,2,3,4,5])
       fmap (+1) lst

    ~>

    fmap (+1) (return [1,2,3,4,5])

    ~>

    do lst <- return [1,2,3,4,5]
       return $ (+1) lst

    but there's no instance Num [Int] in scope

    You probably meant

    do let lst = f [1,2,3,4,5]
       fmap (map (+1)) lst

    >
    > ===============================
    >
    > Prelude> :l test
    > [1 of 1] Compiling Main             ( test.hs, interpreted )
    >
    > test.hs:5:17:
    >     No instance for (Num [Int])
    >       arising from the literal `1' at test.hs:5:17
    >     Possible fix: add an instance declaration for (Num [Int])
    >     In the second argument of `(+)', namely `1'
    >     In the first argument of `fmap', namely `(+ 1)'
    >     In the expression: fmap (+ 1) lst
    > Failed, modules loaded: none.
    > Prelude>


--- On Fri, 12/17/10, Daniel Fischer <daniel.is.fischer at googlemail.com> wrote:

From: Daniel Fischer <daniel.is.fischer at googlemail.com>
Subject: Re: [Haskell-cafe] Why is Haskell flagging this?
To: haskell-cafe at haskell.org
Cc: "michael rice" <nowgate at yahoo.com>
Date: Friday, December 17, 2010, 4:24 PM

On Friday 17 December 2010 18:04:20, michael rice wrote:
> I don't understand this error message. Haskell appears not to understand
> that 1 is a Num.
>
> Prelude> :t 1
> 1 :: (Num t) => t
> Prelude> :t [1,2,3,4,5]
> [1,2,3,4,5] :: (Num t) => [t]
> Prelude>
>
> Michael
>
> ===================
>
> f :: [Int] -> IO [Int]
> f lst = do return lst
>
> main = do let lst = f [1,2,3,4,5]
>           fmap (+1) lst

The fmap is relative to IO, your code is equivalent to

do let lst = (return [1,2,3,4,5])
   fmap (+1) lst

~>

fmap (+1) (return [1,2,3,4,5])

~>

do lst <- return [1,2,3,4,5]
   return $ (+1) lst

but there's no instance Num [Int] in scope

You probably meant

do let lst = f [1,2,3,4,5]
   fmap (map (+1)) lst

>
> ===============================
>
> Prelude> :l test
> [1 of 1] Compiling Main             ( test.hs, interpreted )
>
> test.hs:5:17:
>     No instance for (Num [Int])
>       arising from the literal `1' at test.hs:5:17
>     Possible fix: add an instance declaration for (Num [Int])
>     In the second argument of `(+)', namely `1'
>     In the first argument of `fmap', namely `(+ 1)'
>     In the expression: fmap (+ 1) lst
> Failed, modules loaded: none.
> Prelude>




      
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.haskell.org/pipermail/haskell-cafe/attachments/20101217/57a9358a/attachment.htm>


More information about the Haskell-Cafe mailing list