This is a bit tricky.<div><br></div><div>The type of 'f' is '[Int] -> IO [Int]', which means that the type of 'lst' is 'IO [Int]'.</div><div><br></div><div>So fmap (+1) tries to add one to the [Int] underneath the 'IO' type constructor.</div>
<div><br></div><div>You can either use two 'fmap's, the first to lift up to IO and the second to lift into the list, or you can use monad notation:</div><div><br></div><div>> do</div><div>> lst <- f [1,2,3,4]</div>
<div>> return $ fmap (+1) lst</div><div><br></div><div>Does that make sense?</div><div><br></div><div>Take care,</div><div>Antoine</div><div><br><div class="gmail_quote">On Fri, Dec 17, 2010 at 11:04 AM, michael rice <span dir="ltr"><<a href="mailto:nowgate@yahoo.com">nowgate@yahoo.com</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;"><table cellspacing="0" cellpadding="0" border="0"><tbody><tr><td valign="top" style="font:inherit"><span style="font-family:courier,monaco,monospace,sans-serif">I don't understand this error message. Haskell appears not to understand that 1 is a Num.<br>
<br>Prelude> :t 1<br>1 :: (Num t) => t<br>Prelude> :t [1,2,3,4,5]<br>[1,2,3,4,5] :: (Num t) => [t]<br>Prelude> <br><br>Michael<br><br>===================<br><br>f :: [Int] -> IO [Int]</span><br style="font-family:courier,monaco,monospace,sans-serif">
<span style="font-family:courier,monaco,monospace,sans-serif">f lst = do return lst</span><br style="font-family:courier,monaco,monospace,sans-serif"><br style="font-family:courier,monaco,monospace,sans-serif"><span style="font-family:courier,monaco,monospace,sans-serif">main = do let lst = f [1,2,3,4,5]</span><br style="font-family:courier,monaco,monospace,sans-serif">
<span style="font-family:courier,monaco,monospace,sans-serif"> fmap (+1) lst</span><br style="font-family:courier,monaco,monospace,sans-serif"><br>===============================<br><br>Prelude> :l test<br>[1 of 1] Compiling Main ( test.hs, interpreted )<br>
<br>test.hs:5:17:<br> No instance for (Num [Int])<br> arising from the literal `1' at test.hs:5:17<br> Possible fix: add an instance declaration for (Num [Int])<br> In the second argument of `(+)', namely `1'<br>
In the first argument of `fmap', namely `(+ 1)'<br> In the expression: fmap (+ 1) lst<br>Failed, modules loaded: none.<br>Prelude> <br></td></tr></tbody></table><br>
<br>_______________________________________________<br>
Haskell-Cafe mailing list<br>
<a href="mailto:Haskell-Cafe@haskell.org">Haskell-Cafe@haskell.org</a><br>
<a href="http://www.haskell.org/mailman/listinfo/haskell-cafe" target="_blank">http://www.haskell.org/mailman/listinfo/haskell-cafe</a><br>
<br></blockquote></div><br></div>