
On 17 Dec 2010, at 21:44, Christopher Done wrote:
On 17 December 2010 18:04, michael rice
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