base: Add missing Traversable instance for ZipList
authorBen Gamari <ben@smart-cactus.org>
Fri, 7 Aug 2015 03:50:22 +0000 (05:50 +0200)
committerBen Gamari <ben@smart-cactus.org>
Fri, 7 Aug 2015 04:41:10 +0000 (06:41 +0200)
libraries/base/Control/Applicative.hs
libraries/base/Data/Traversable.hs

index 39b6466..a2f342f 100644 (file)
@@ -122,8 +122,9 @@ instance (ArrowZero a, ArrowPlus a) => Alternative (WrappedArrow a b) where
 -- @f '<$>' 'ZipList' xs1 '<*>' ... '<*>' 'ZipList' xsn = 'ZipList' (zipWithn f xs1 ... xsn)@
 --
 newtype ZipList a = ZipList { getZipList :: [a] }
-                  deriving ( Show, Eq, Ord, Read, Functor, Foldable
-                           , Generic, Generic1)
+                  deriving ( Show, Eq, Ord, Read, Functor
+                           , Foldable, Generic, Generic1)
+-- See Data.Traversable for Traversabel instance due to import loops
 
 instance Applicative ZipList where
     pure x = ZipList (repeat x)
index 535db00..81e639c 100644 (file)
@@ -46,7 +46,9 @@ module Data.Traversable (
     foldMapDefault,
     ) where
 
-import Control.Applicative ( Const(..) )
+-- It is convenient to use 'Const' here but this means we must
+-- define a few instances here which really belong in Control.Applicative
+import Control.Applicative ( Const(..), ZipList(..) )
 import Data.Either ( Either(..) )
 import Data.Foldable ( Foldable )
 import Data.Functor
@@ -217,6 +219,9 @@ instance Traversable First where
 instance Traversable Last where
     traverse f (Last x) = Last <$> traverse f x
 
+instance Traversable ZipList where
+    traverse f (ZipList x) = ZipList <$> traverse f x
+
 -- general functions
 
 -- | 'for' is 'traverse' with its arguments flipped. For a version