To make that a little clearer, here is code that uses two calls to fmap to drill through two monadic layers: f :: [Int] -> IO [Int] f lst = do return lst
main = do let lst = f [1,2,3,4,5] fmap (fmap (+1)) lst So the order of operations is : 1. The first fmap converts an IO [Int] to [Int] and hands it off to the second fmap 2. The second fmap applies the (+1) function to every element of the list. 3. The second fmap re-wraps the elements back into a [Int] 4. The first fmap re-wraps and returns the transformed [Int] into an IO [Int]. -deech On Fri, Dec 17, 2010 at 3:27 PM, aditya siram <aditya.si...@gmail.com>wrote: > I think it is giving you the error because you the "fmap" in your code is > operating on the IO monad and not the List monad. In order to get it to > work, you can remove the IO layer with ">>=" as below: > > > f :: [Int] -> IO [Int] > f lst = do return lst > > main = do let lst = f [1,2,3,4,5] > lst >>= return . fmap (+1) > > Or you can not wrap the list in IO to begin with, my guess is that you > wrote 'f' to make the compiler happy at some point in development: > main = do let lst = [1,2,3,4,5] > return $ fmap (+1) lst > > -deech > > On Fri, Dec 17, 2010 at 11:04 AM, michael rice <nowg...@yahoo.com> wrote: > >> I don't understand this error message. Haskell appears not to understand >> that 1 is a Num. >> >> Prelude> :t 1 >> 1 :: (Num t) => t >> Prelude> :t [1,2,3,4,5] >> [1,2,3,4,5] :: (Num t) => [t] >> Prelude> >> >> Michael >> >> =================== >> >> f :: [Int] -> IO [Int] >> f lst = do return lst >> >> main = do let lst = f [1,2,3,4,5] >> fmap (+1) lst >> >> =============================== >> >> Prelude> :l test >> [1 of 1] Compiling Main ( test.hs, interpreted ) >> >> test.hs:5:17: >> No instance for (Num [Int]) >> arising from the literal `1' at test.hs:5:17 >> Possible fix: add an instance declaration for (Num [Int]) >> In the second argument of `(+)', namely `1' >> In the first argument of `fmap', namely `(+ 1)' >> In the expression: fmap (+ 1) lst >> Failed, modules loaded: none. >> Prelude> >> >> >> _______________________________________________ >> Haskell-Cafe mailing list >> Haskell-Cafe@haskell.org >> http://www.haskell.org/mailman/listinfo/haskell-cafe >> >> >
_______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe