<br><br><div class="gmail_quote">On Fri, Dec 17, 2010 at 9:04 AM, michael rice <span dir="ltr">&lt;<a href="mailto:nowgate@yahoo.com">nowgate@yahoo.com</a>&gt;</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&#39;t understand this error message. Haskell appears not to understand that 1 is a Num.<br>
<br>Prelude&gt; :t 1<br>1 :: (Num t) =&gt; t<br>Prelude&gt; :t [1,2,3,4,5]<br>[1,2,3,4,5] :: (Num t) =&gt; [t]<br>Prelude&gt; <br><br>Michael<br><br>===================<br><br>f :: [Int] -&gt; 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></td></tr></tbody></table></blockquote><div><br></div><div>f takes [Int] and returns IO [Int]</div><div><br></div><div>fmap is </div>
<div><br></div><div><div>fmap :: (Functor f) =&gt; (a -&gt; b) -&gt; f a -&gt; f b</div></div><div><br></div><div>That is it takes a function of a&#39;s to b&#39;s, a functor of a, and returns you a functor of b.</div><div>
<br></div><div>So when you fmap (+1) to an IO [Int], it&#39;s trying to add 1 to a [Int], and [Int] is not an instance of Num, so the + does not work.</div><div><br></div><div>Luckily you can use function composition here</div>
<div><br></div><div>(fmap . fmap) (+1) $ f [1..10]</div><div><div>[2,3,4,5,6,7,8,9,10,11]</div></div><div><br></div><div>fmap . fmap is the type I think you wanted:</div><div><br></div><div><div>Prelude&gt; :t fmap . fmap</div>
<div>fmap . fmap</div><div>  :: (Functor f, Functor f1) =&gt; (a -&gt; b) -&gt; f (f1 a) -&gt; f (f1 b)</div></div><div><br></div><div><br></div><div>With IO as the f Functor, and [] as the f1 Functor.</div><div> </div><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"><br style="font-family:courier,monaco,monospace,sans-serif"><br>===============================<br><br>Prelude&gt; :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&#39; at test.hs:5:17<br>    Possible fix: add an instance declaration for (Num [Int])<br>
    In the second argument of `(+)&#39;, namely `1&#39;<br>    In the first argument of `fmap&#39;, namely `(+ 1)&#39;<br>    In the expression: fmap (+ 1) lst<br>Failed, modules loaded: none.<br>Prelude&gt; <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>