Vo Minh Thu noteed at gmail.com
Thu Aug 26 02:52:20 EDT 2010

```I think it works well :)

But sumsqr has type Int -> Int -> Int, not Int -> Int -> Int -> Int.

I.e. it does take only two arguments while fmap3 takes a function of
three arguments.

2010/8/26 michael rice <nowgate at yahoo.com>
>
> 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 <ivan.miljenovic at gmail.com> wrote:
>
> From: Ivan Lazar Miljenovic <ivan.miljenovic at gmail.com>
> Subject: Re: [Haskell-cafe] On to applicative
> To: "michael rice" <nowgate at yahoo.com>
> Date: Thursday, August 26, 2010, 2:33 AM
>
> On 26 August 2010 16:29, michael rice <nowgate at yahoo.com> wrote:
> >
> > 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 at gmail.com
> IvanMiljenovic.wordpress.com
>
>
> _______________________________________________