Migrate Bifoldable and Bitraversable instances for Constant
authorryan.gl.scott <ryan.gl.scott@gmail.com>
Fri, 16 Dec 2016 02:23:53 +0000 (02:23 +0000)
committerryan.gl.scott <ryan.gl.scott@gmail.com>
Fri, 16 Dec 2016 02:23:53 +0000 (02:23 +0000)
These were originally defined in the bifunctors library. The Data.Bifoldable
and Data.Bitraversable modules will be moved to base in base-4.10, so this
commit moves the corresponding instances for Constant to transformers to
accommodate the migration.

Data/Functor/Constant.hs

index 3158bd9..ba43741 100644 (file)
@@ -34,6 +34,10 @@ import Data.Traversable (Traversable(traverse))
 #if MIN_VERSION_base(4,8,0)
 import Data.Bifunctor (Bifunctor(..))
 #endif
+#if MIN_VERSION_base(4,10,0)
+import Data.Bifoldable (Bifoldable(..))
+import Data.Bitraversable (Bitraversable(..))
+#endif
 import Prelude hiding (null, length)
 
 -- | Constant functor.
@@ -115,3 +119,13 @@ instance Bifunctor Constant where
     second _ (Constant x) = Constant x
     {-# INLINE second #-}
 #endif
+
+#if MIN_VERSION_base(4,10,0)
+instance Bifoldable Constant where
+    bifoldMap f _ (Constant a) = f a
+    {-# INLINE bifoldMap #-}
+
+instance Bitraversable Constant where
+    bitraverse f _ (Constant a) = Constant <$> f a
+    {-# INLINE bitraverse #-}
+#endif