Don't use $ in the definition of (<**>) in GHC.Base
authorMatthew Pickering <matthewtpickering@gmail.com>
Tue, 3 Jan 2017 05:22:03 +0000 (00:22 -0500)
committerBen Gamari <ben@smart-cactus.org>
Tue, 3 Jan 2017 05:22:04 +0000 (00:22 -0500)
($) is special as Richard explains in the note at the top of the page.

However, when adding the note he didn't remove this usage. Normally it
didn't cause any problems as the optimiser optimised it away. However if
one had the propensity to stick one's fingers into the depths of the
inliner, it caused horrible idInfo panics.

Reviewers: rwbarton, hvr, austin, bgamari

Reviewed By: bgamari

Subscribers: thomie

Differential Revision: https://phabricator.haskell.org/D2913

GHC Trac Issues: #13055

libraries/base/GHC/Base.hs

index 34a038d..490596e 100644 (file)
@@ -423,7 +423,8 @@ class Functor f => Applicative f where
 
 -- | A variant of '<*>' with the arguments reversed.
 (<**>) :: Applicative f => f a -> f (a -> b) -> f b
-(<**>) = liftA2 (flip ($))
+(<**>) = liftA2 (\a f -> f a)
+-- Don't use $ here, see the note at the top of the page
 
 -- | Lift a function to actions.
 -- This function may be used as a value for `fmap` in a `Functor` instance.