[Haskell-beginners] The Missing Arrow Function Strikes Back

Ertugrul Söylemez es at ertes.de
Wed Jun 5 06:55:11 CEST 2013


Adrian May <adrian.alexander.may at gmail.com> wrote:

> I just banged up against this problem:
>
> http://haskell.1045720.n5.nabble.com/The-case-of-the-missing-Arrow-function-td3125388.html
>
> Was liftA2 (not the applicative one) a bad idea, or is there another
> way to do it, or what?

That liftA2 (let me call it liftA2') likely has this type signature:

    liftA2' :: (Arrow cat)
               => (b -> c -> d)
               -> cat a b
               -> cat a c
               -> cat a d

Does this sound familiar?  You can write this function in terms of the
arrow combinators:

    liftA2' f c d = arr (uncurry f) . (c &&& d)

However, if your arrow is also a family of applicative functors
(i.e. pretty much always),

    instance Applicative (MyArrow a)

then it's probably a bad idea, because you really want to use the
cleaner liftA2 instead:

    liftA2 :: (Applicative f)
              => (a -> b -> c)
              -> f a
              -> f b
              -> f c


Greets,
Ertugrul

-- 
Not to be or to be and (not to be or to be and (not to be or to be and
(not to be or to be and ... that is the list monad.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 836 bytes
Desc: not available
URL: <http://www.haskell.org/pipermail/beginners/attachments/20130605/0aae8d44/attachment.pgp>


More information about the Beginners mailing list