On 17 Dec 2010, at 21:44, Christopher Done wrote:
> On 17 December 2010 18:04, michael rice <nowg...@yahoo.com> wrote:
> ===================
>
> f :: [Int] -> IO [Int]
> f lst = do return lst
>
> main = do let lst = f [1,2,3,4,5]
> fmap (+1) lst
>
> The problem is that you are applying fmap to a type IO a.
>
> fmap (+1) (return [1,2,3])
>
> But to achieve the behaviour you expect, you need another fmap:
>
> fmap (fmap (+1)) (return [1,2,3])
Which can be more neatly written with Conal's semantic editor cominators as
(fmap . fmap) (+1) (return [1,2,3])
Of course, I question why the list is put in the IO monad at all here... surely
this would be much better
return $ fmap (+1) [1,2,3]
Finally, that has the wrong type for main... perhaps you meant to print it out?
main :: IO ()
main = print $ fmap (+1) [1,2,3]
Bob
_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe