Add Alternative instance for ZipList (fix #13520).
authorEdvard Hübinette <edvard@hubinette.me>
Wed, 5 Apr 2017 01:48:37 +0000 (21:48 -0400)
committerBen Gamari <ben@smart-cactus.org>
Wed, 5 Apr 2017 01:48:39 +0000 (21:48 -0400)
Reviewers: austin, hvr, bgamari, RyanGlScott

Reviewed By: RyanGlScott

Subscribers: adamse, RyanGlScott, rwbarton, thomie

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

libraries/base/Control/Applicative.hs
libraries/base/changelog.md

index 9045bcd..559cced 100644 (file)
@@ -59,7 +59,7 @@ import Data.Functor.Const (Const(..))
 
 import GHC.Base
 import GHC.Generics
-import GHC.List (repeat, zipWith)
+import GHC.List (repeat, zipWith, drop)
 import GHC.Read (Read)
 import GHC.Show (Show)
 
@@ -121,6 +121,11 @@ instance Applicative ZipList where
     pure x = ZipList (repeat x)
     liftA2 f (ZipList xs) (ZipList ys) = ZipList (zipWith f xs ys)
 
+-- | @since 4.11.0.0
+instance Alternative ZipList where
+   empty = ZipList []
+   ZipList xs <|> ZipList ys = ZipList (xs ++ drop (length xs) ys)
+
 -- extra functions
 
 -- | One or none.
index f2ea265..854a9b8 100644 (file)
@@ -1,5 +1,10 @@
 # Changelog for [`base` package](http://hackage.haskell.org/package/base)
 
+## 4.11.0.0 *TBA*
+  * Bundled with GHC *TBA*
+
+  * Add `Alternative` instance for `ZipList` (#13520)
+
 ## 4.10.0.0 *April 2017*
   * Bundled with GHC *TBA*