make Lift's <*> lazier (fixes #68) master
authorRoss Paterson <ross@soi.city.ac.uk>
Sat, 2 Mar 2019 21:52:16 +0000 (21:52 +0000)
committerRoss Paterson <ross@soi.city.ac.uk>
Sat, 2 Mar 2019 21:52:16 +0000 (21:52 +0000)
Suggested by Roman Cheplyaka.

Control/Applicative/Lift.hs

index 8d35e28..943d7dc 100644 (file)
@@ -91,10 +91,8 @@ instance (Traversable f) => Traversable (Lift f) where
 instance (Applicative f) => Applicative (Lift f) where
     pure = Pure
     {-# INLINE pure #-}
-    Pure f <*> Pure x = Pure (f x)
-    Pure f <*> Other y = Other (f <$> y)
-    Other f <*> Pure x = Other (($ x) <$> f)
-    Other f <*> Other y = Other (f <*> y)
+    Pure f <*> ax = f <$> ax
+    Other f <*> ax = Other (f <*> unLift ax)
     {-# INLINE (<*>) #-}
 
 -- | A combination is 'Pure' only either part is.