And here's the arrow implementation

(pred1 &&& pred2) >>> uncurry (&&)

You need Data.Tuple (for uncurry) and Data.Arrow. 


On Mon, Nov 16, 2015 at 5:40 PM, Frerich Raabe <raabe@froglogic.com> wrote:
On 2015-11-16 12:44, Mark Carter wrote:
Suppose I want to use an argument twice, as for example in the expression:
(\x -> (pred1 x) and (pred2 x))

Is there a shorter way of doing this?

I suppose you meant to write '&&' instead of 'and'?

You can write it in an applicative style as

  (&&) <$> pred1 <*> pred2

If you like, you can shorten that a bit using 'liftA2' as

  liftA2 (&&) pred1 pred2

but I personally tend to like the former version better.

--
Frerich Raabe - raabe@froglogic.com
www.froglogic.com - Multi-Platform GUI Testing

_______________________________________________
Beginners mailing list
Beginners@haskell.org
http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners