<table cellspacing="0" cellpadding="0" border="0" ><tr><td valign="top" style="font: inherit;">Hi, all.<br><br>Plenty of answers. Thank you.<br><br>Putting the list in the IO monad was deliberate. Another one I was looking at was<br><br>f :: String -&gt; IO String<br>f s = do return s<br><br>main = do ios &lt;- f "hello"<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; fmap tail ios<br><br>which worked fine<br><br>So, the big error was trying to add&nbsp; 1 + [1,2,3,4,5].<br><br>I considered that I needed an additional fmap and thought I had tried<br><br>fmap (fmap (1+)) iol<br><br>but must have messed it up, because I got an error. I guess I was on the right track.<br><br>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.<br><br>Thanks again,<br><br>Michael<br><br>--- On Fri, 12/17/10, Daniel Fischer
 &lt;daniel.is.fischer@googlemail.com&gt; wrote:<br><br><br>&nbsp;&nbsp;&nbsp; From: Daniel Fischer &lt;daniel.is.fischer@googlemail.com&gt;<br>&nbsp;&nbsp;&nbsp; Subject: Re: [Haskell-cafe] Why is Haskell flagging this?<br>&nbsp;&nbsp;&nbsp; To: haskell-cafe@haskell.org<br>&nbsp;&nbsp;&nbsp; Cc: "michael rice" &lt;nowgate@yahoo.com&gt;<br>&nbsp;&nbsp;&nbsp; Date: Friday, December 17, 2010, 4:24 PM<br><br>&nbsp;&nbsp;&nbsp; On Friday 17 December 2010 18:04:20, michael rice wrote:<br>&nbsp;&nbsp;&nbsp; &gt; I don't understand this error message. Haskell appears not to understand<br>&nbsp;&nbsp;&nbsp; &gt; that 1 is a Num.<br>&nbsp;&nbsp;&nbsp; &gt;<br>&nbsp;&nbsp;&nbsp; &gt; Prelude&gt; :t 1<br>&nbsp;&nbsp;&nbsp; &gt; 1 :: (Num t) =&gt; t<br>&nbsp;&nbsp;&nbsp; &gt; Prelude&gt; :t [1,2,3,4,5]<br>&nbsp;&nbsp;&nbsp; &gt; [1,2,3,4,5] :: (Num t) =&gt; [t]<br>&nbsp;&nbsp;&nbsp; &gt; Prelude&gt;<br>&nbsp;&nbsp;&nbsp; &gt;<br>&nbsp;&nbsp;&nbsp; &gt;
 Michael<br>&nbsp;&nbsp;&nbsp; &gt;<br>&nbsp;&nbsp;&nbsp; &gt; ===================<br>&nbsp;&nbsp;&nbsp; &gt;<br>&nbsp;&nbsp;&nbsp; &gt; f :: [Int] -&gt; IO [Int]<br>&nbsp;&nbsp;&nbsp; &gt; f lst = do return lst<br>&nbsp;&nbsp;&nbsp; &gt;<br>&nbsp;&nbsp;&nbsp; &gt; main = do let lst = f [1,2,3,4,5]<br>&nbsp;&nbsp;&nbsp; &gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; fmap (+1) lst<br><br>&nbsp;&nbsp;&nbsp; The fmap is relative to IO, your code is equivalent to<br><br>&nbsp;&nbsp;&nbsp; do let lst = (return [1,2,3,4,5])<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; fmap (+1) lst<br><br>&nbsp;&nbsp;&nbsp; ~&gt;<br><br>&nbsp;&nbsp;&nbsp; fmap (+1) (return [1,2,3,4,5])<br><br>&nbsp;&nbsp;&nbsp; ~&gt;<br><br>&nbsp;&nbsp;&nbsp; do lst &lt;- return [1,2,3,4,5]<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return $ (+1) lst<br><br>&nbsp;&nbsp;&nbsp; but there's no instance Num [Int] in scope<br><br>&nbsp;&nbsp;&nbsp; You probably
 meant<br><br>&nbsp;&nbsp;&nbsp; do let lst = f [1,2,3,4,5]<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; fmap (map (+1)) lst<br><br>&nbsp;&nbsp;&nbsp; &gt;<br>&nbsp;&nbsp;&nbsp; &gt; ===============================<br>&nbsp;&nbsp;&nbsp; &gt;<br>&nbsp;&nbsp;&nbsp; &gt; Prelude&gt; :l test<br>&nbsp;&nbsp;&nbsp; &gt; [1 of 1] Compiling Main&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ( test.hs, interpreted )<br>&nbsp;&nbsp;&nbsp; &gt;<br>&nbsp;&nbsp;&nbsp; &gt; test.hs:5:17:<br>&nbsp;&nbsp;&nbsp; &gt;&nbsp;&nbsp;&nbsp;&nbsp; No instance for (Num [Int])<br>&nbsp;&nbsp;&nbsp; &gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; arising from the literal `1' at test.hs:5:17<br>&nbsp;&nbsp;&nbsp; &gt;&nbsp;&nbsp;&nbsp;&nbsp; Possible fix: add an instance declaration for (Num [Int])<br>&nbsp;&nbsp;&nbsp; &gt;&nbsp;&nbsp;&nbsp;&nbsp; In the second argument of `(+)', namely `1'<br>&nbsp;&nbsp;&nbsp; &gt;&nbsp;&nbsp;&nbsp;&nbsp; In the first argument of
 `fmap', namely `(+ 1)'<br>&nbsp;&nbsp;&nbsp; &gt;&nbsp;&nbsp;&nbsp;&nbsp; In the expression: fmap (+ 1) lst<br>&nbsp;&nbsp;&nbsp; &gt; Failed, modules loaded: none.<br>&nbsp;&nbsp;&nbsp; &gt; Prelude&gt;<br><br><br>--- On <b>Fri, 12/17/10, Daniel Fischer <i>&lt;daniel.is.fischer@googlemail.com&gt;</i></b> wrote:<br><blockquote style="border-left: 2px solid rgb(16, 16, 255); margin-left: 5px; padding-left: 5px;"><br>From: Daniel Fischer &lt;daniel.is.fischer@googlemail.com&gt;<br>Subject: Re: [Haskell-cafe] Why is Haskell flagging this?<br>To: haskell-cafe@haskell.org<br>Cc: "michael rice" &lt;nowgate@yahoo.com&gt;<br>Date: Friday, December 17, 2010, 4:24 PM<br><br><div class="plainMail">On Friday 17 December 2010 18:04:20, michael rice wrote:<br>&gt; I don't understand this error message. Haskell appears not to understand<br>&gt; that 1 is a Num.<br>&gt;<br>&gt; Prelude&gt; :t 1<br>&gt; 1 :: (Num t) =&gt; t<br>&gt; Prelude&gt; :t [1,2,3,4,5]<br>&gt;
 [1,2,3,4,5] :: (Num t) =&gt; [t]<br>&gt; Prelude&gt;<br>&gt;<br>&gt; Michael<br>&gt;<br>&gt; ===================<br>&gt;<br>&gt; f :: [Int] -&gt; IO [Int]<br>&gt; f lst = do return lst<br>&gt;<br>&gt; main = do let lst = f [1,2,3,4,5]<br>&gt; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; fmap (+1) lst<br><br>The fmap is relative to IO, your code is equivalent to<br><br>do let lst = (return [1,2,3,4,5])<br>&nbsp;&nbsp;&nbsp;fmap (+1) lst<br><br>~&gt;<br><br>fmap (+1) (return [1,2,3,4,5])<br><br>~&gt;<br><br>do lst &lt;- return [1,2,3,4,5]<br>&nbsp;&nbsp;&nbsp;return $ (+1) lst<br><br>but there's no instance Num [Int] in scope<br><br>You probably meant<br><br>do let lst = f [1,2,3,4,5]<br>&nbsp;&nbsp;&nbsp;fmap (map (+1)) lst<br><br>&gt;<br>&gt; ===============================<br>&gt;<br>&gt; Prelude&gt; :l test<br>&gt; [1 of 1] Compiling Main&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ( test.hs, interpreted
 )<br>&gt;<br>&gt; test.hs:5:17:<br>&gt; &nbsp;&nbsp;&nbsp; No instance for (Num [Int])<br>&gt; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; arising from the literal `1' at test.hs:5:17<br>&gt; &nbsp;&nbsp;&nbsp; Possible fix: add an instance declaration for (Num [Int])<br>&gt; &nbsp;&nbsp;&nbsp; In the second argument of `(+)', namely `1'<br>&gt; &nbsp;&nbsp;&nbsp; In the first argument of `fmap', namely `(+ 1)'<br>&gt; &nbsp;&nbsp;&nbsp; In the expression: fmap (+ 1) lst<br>&gt; Failed, modules loaded: none.<br>&gt; Prelude&gt;<br><br></div></blockquote></td></tr></table><br>