You can also mix in 'first' and 'second' arbitrarily and read them directly from the type as well, when there is (possibly nested) pair structure on the way to the value being modified.  That's why I call fmap, first, and second "semantic editor combinators".  Sometime soon I'm going to blog about these tricks.

  - Conal

On Tue, Nov 18, 2008 at 10:20 AM, Creighton Hogg <wchogg@gmail.com> wrote:


On Tue, Nov 18, 2008 at 12:15 PM, Conal Elliott <conal@conal.net> wrote:
Also, a less forgetful version of subs might be useful:

     withSubs xs e :: [a] -> Event b -> Event (b,a)

and then

    subs xs e  = snd <$> withSubs xs e

or, if you like,

    subs = (fmap.fmap.fmap) snd withSubs

Btw, you can read the three fmaps directly from the signature of withSubs (two arrows plus one Event on the way to the pair).

  - Conal

That's a cute trick with the number of fmap's required.  Never thought of it that way.

Also, I'd like to apologize for not mentioning quicksilver from #haskell in my last e-mail.  An honest slip-up, but an inappropriate one.