Add fmapCoerce to Functor class.
authorAustin Seipp <austin@well-typed.com>
Wed, 25 Sep 2013 04:20:35 +0000 (23:20 -0500)
committerAustin Seipp <austin@well-typed.com>
Wed, 25 Sep 2013 04:23:03 +0000 (23:23 -0500)
This allows coercions to work under functors that are not locally known.

Authored-by: Edward Kmett <ekmett@gmail.com>
Signed-off-by: Austin Seipp <austin@well-typed.com>
GHC/Base.lhs

index d876202..55172af 100644 (file)
@@ -105,7 +105,6 @@ module GHC.Base
         module GHC.Err          -- import it explicitly
   )
         where
-
 import GHC.Types
 import GHC.Classes
 import GHC.CString
@@ -186,6 +185,9 @@ class  Functor f  where
     (<$)        :: a -> f b -> f a
     (<$)        =  fmap . const
 
+    fmapCoerce :: Coercible a b => f a -> f b
+    fmapCoerce = fmap coerce
+
 {- | The 'Monad' class defines the basic operations over a /monad/,
 a concept from a branch of mathematics known as /category theory/.
 From the perspective of a Haskell programmer, however, it is best to