I think it is giving you the error because you the "fmap" in your code is
operating on the IO monad and not the List monad. In order to get it to
work, you can remove the IO layer with ">>=" as below:

f :: [Int] -> IO [Int]
f lst = do return lst

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

Or you can not wrap the list in IO to begin with, my guess is that you wrote
'f' to make the compiler happy at some point in development:
main = do let lst = [1,2,3,4,5]
          return $ fmap (+1) lst

-deech

On Fri, Dec 17, 2010 at 11:04 AM, michael rice <nowg...@yahoo.com> 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
>
> ===============================
>
> 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>
>
>
> _______________________________________________
> 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