base: Enable listToMaybe to fuse via foldr/build
authorDouglas Wilson <douglas.wilson@gmail.com>
Wed, 25 Oct 2017 23:05:30 +0000 (19:05 -0400)
committerBen Gamari <ben@smart-cactus.org>
Wed, 25 Oct 2017 23:05:31 +0000 (19:05 -0400)
Test Plan: Consider whether this is a good idea.

Reviewers: austin, hvr, bgamari, nomeata

Reviewed By: bgamari, nomeata

Subscribers: nomeata, rwbarton, thomie

GHC Trac Issues: #14387

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

libraries/base/Data/Maybe.hs

index d8aad53..5f5d5ac 100644 (file)
@@ -228,9 +228,12 @@ maybeToList  (Just x)  = [x]
 -- >>> maybeToList $ listToMaybe [1,2,3]
 -- [1]
 --
-listToMaybe           :: [a] -> Maybe a
-listToMaybe []        =  Nothing
-listToMaybe (a:_)     =  Just a
+listToMaybe :: [a] -> Maybe a
+listToMaybe = foldr (const . Just) Nothing
+{-# INLINE listToMaybe #-}
+-- We define listToMaybe using foldr so that it can fuse via the foldr/build
+-- rule. See #14387
+
 
 -- | The 'catMaybes' function takes a list of 'Maybe's and returns
 -- a list of all the 'Just' values.