
OK, fmap2 works, but not fmap3. What am I not understanding?
Michael
import Control.Applicative
-- f :: (a -> b -> c)
-- fmap :: Functor f => (d -> e) -> f d -> f e
sumsqr :: Int -> Int -> Int
sumsqr i j = i*i+j*j
-- fmap :: Functor f => f a -> f (b -> c) -- Identify d with a, and e with (b -> c)
fmap2 f a b = f `fmap` a <*> b
fmap3 f a b c = f `fmap` a <*> b <*> c
fmap4 f a b c d = f `fmap` a <*> b <*> c <*> d
-- fmap2 f a b = f <$> a <*> b
-- fmap3 f a b c = f <$> a <*> b <*> c
-- fmap4 f a b c d = f <$> a <*> b <*> c <*> d
*Main> fmap2 sumsqr (Just 3) (Just 4)
Just 25
*Main> fmap3 sumsqr (Just 3) (Just 4) (Just 5)
<interactive>:1:6:
Couldn't match expected type `a2 -> b' against inferred type `Int'
In the first argument of `fmap3', namely `sumsqr'
In the expression: fmap3 sumsqr (Just 3) (Just 4) (Just 5)
In the definition of `it':
it = fmap3 sumsqr (Just 3) (Just 4) (Just 5)
*Main>
--- On Thu, 8/26/10, Ivan Lazar Miljenovic
Can you recommend an example that works?
An example of what? The definitions of fmap2, etc. on that page look like they're correct. -- Ivan Lazar Miljenovic Ivan.Miljenovic@gmail.com IvanMiljenovic.wordpress.com