diff --git a/pointfree-fancy.cabal b/pointfree-fancy.cabal
--- a/pointfree-fancy.cabal
+++ b/pointfree-fancy.cabal
@@ -1,6 +1,6 @@
 cabal-version: 2.0
 name: pointfree-fancy
-version: 1.1.1.12
+version: 1.1.1.13
 license: BSD3
 license-file: LICENSE
 maintainer: Vanessa McHale <vamchale@gmail.com>
diff --git a/src/Plugin/Pl/Rules.hs b/src/Plugin/Pl/Rules.hs
--- a/src/Plugin/Pl/Rules.hs
+++ b/src/Plugin/Pl/Rules.hs
@@ -165,7 +165,7 @@
   fixE, foldl1E, notE, equalsE, nequalsE, plusE, multE, zeroE, oneE, lengthE,
   sumE, productE, concatE, concatMapE, joinE, mapE, fmapE, fmapIE, subtractE,
   minusE, liftME, apE, liftM2E, seqME, zipE, zipWithE, onE, oedipusE, oedipus2E, comp2E,
-  crossE, firstE, secondE, andE, orE, allE, anyE, returnE, fishE, mfishE,
+  crossE, arrowE, firstE, secondE, andE, orE, allE, anyE, returnE, fishE, mfishE,
   needleE, mneedleE :: MExpr
 idE        = Quote $ Var Pref "id"
 flipE      = Quote $ Var Pref "flip"
@@ -224,6 +224,7 @@
 zipE       = Quote $ Var Pref "zip"
 zipWithE   = Quote $ Var Pref "zipWith"
 crossE     = Quote $ Var Inf  "***"
+arrowE     = Quote $ Var Inf  "&&&"
 firstE     = Quote $ Var Pref "first"
 secondE    = Quote $ Var Pref "second"
 andE       = Quote $ Var Pref "and"
@@ -714,10 +715,15 @@
   rr (\p q -> seqME `a` p `a` q)
      (\p q -> extE `a` (constE `a` q) `a` p),
 
-  -- ap (f .@ ((,) . f . fst)) snd --> f (***) f
+  -- ap (f .@ ((,) . f . fst)) snd --> f *** f
   Hard $
   rr (\f -> apE `a` (f `o` (commaE `c` f `c` fstE)) `a` sndE)
      (\f -> joinE `a` crossE `a` f),
+
+  -- liftM2 ap ((,) .* fst) snd --> uncurry (&&&)
+  Hard $
+  rr (liftM2E `a` apE `a` (commaE `c2` fstE) `a` sndE)
+     (uncurryE `a` arrowE),
 
   -- flip (=<<) --> >>=
   rr (flipE `a` extE)
diff --git a/test/Test.hs b/test/Test.hs
--- a/test/Test.hs
+++ b/test/Test.hs
@@ -210,7 +210,8 @@
   unitTest "\\b -> (\\c -> ((Control.Monad.>>=) c) (\\g -> Control.Applicative.pure (b g)))"
     ["flip (Control.Monad.>>=) . (Control.Applicative.pure .)"],
   unitTest "\\(x, y) -> z" ["const z"],
-  unitTest "\\(x, y) -> a" ["const a"]
+  unitTest "\\(x, y) -> a" ["const a"],
+  unitTest "\\(f, g) x -> (f x, g x)" ["uncurry (&&&)"]
   ]
 
 main :: IO ()
