On Tue, Nov 20, 2012 at 1:44 PM, Bryan O'Sullivan <bos@serpentine.com> wrote:
On Tue, Nov 20, 2012 at 10:39 AM, Edward Kmett <ekmett@gmail.com> wrote:
We converted to (&) because of its incredible terseness and general lack of use across hackage. For DSL purposes, to me it is key that this operator be as succinct as possible and (&) is remarkably underutilized in haskell libraries today, due to the fact that (|) is taken by syntax, and our C-inspired brains tend to pair them.

That seems fairly convincing to me. Count me as a +1 on Yitz's original proposal of & *or* on |> instead, whichever wins in the court of popular opinion.

I assume this will have the not-very exciting type of

(a -> b) -> (b -> c) -> a -> c

?

(&) :: a -> (a -> b) -> b

it is just  flip ($)

>>> ("hello","world")  &  _1.traverse %~ toUpper  & _2 .~ 42
("HELLO",42)

could be written

_2 .~ 42 $ _1.traverse .~ toUpper $ ("hello","world")

but that goes in the opposite direction of the corresponding code for working with the state monad with lenses:

foo = do
   _1.traverse %= toUpper
   _2 .~ "42"

-Edward