[GHC] #10448: Implement rest of "Add bifunctor related classes to base"-Proposal

GHC ghc-devs at haskell.org
Tue Sep 29 19:07:14 UTC 2015


#10448: Implement rest of "Add bifunctor related classes to base"-Proposal
-------------------------------------+-------------------------------------
        Reporter:  hvr               |                Owner:
            Type:  task              |               Status:  new
        Priority:  normal            |            Milestone:  8.0.1
       Component:  libraries/base    |              Version:
      Resolution:                    |             Keywords:
Operating System:  Unknown/Multiple  |         Architecture:
                                     |  Unknown/Multiple
 Type of failure:  None/Unknown      |            Test Case:
      Blocked By:                    |             Blocking:
 Related Tickets:  #9682             |  Differential Rev(s):  Phab:D336
-------------------------------------+-------------------------------------

Comment (by RyanGlScott):

 Ed pointed out to me that one possible stumbling block in migrating
 `Bitraversable` to `base` is
 [http://hackage.haskell.org/package/bifunctors-5/docs/Data-
 Bitraversable.html its current definition]:

 {{{#!hs
 class (Bifunctor t, Bifoldable t) => Bitraversable t where
     bitraverse :: Applicative f => (a -> f c) -> (b -> f d) -> t a b -> f
 (t c d)
     bisequenceA :: Applicative f => t (f a) (f b) -> f (t a b)
     bimapM :: Monad m => (a -> m c) -> (b -> m d) -> t a b -> m (t c d)
     bisequence :: Monad m => t (m a) (m b) -> m (t a b)
 }}}

 Like `Traversable`, `Bitraversable` currently has two duplicate method
 signatures with stronger constraints (`Monad` instead of `Applicative`).
 We should probably aim to make `bimapM` and `bisequence` top-level
 definitions instead of class methods during the migration, but there has
 been a lingering question of whether this would affect runtime
 performance.

 AFAICT, the consensus is that any remaining obstacles to redefining `mapM
 = traverse`
 [https://mail.haskell.org/pipermail/libraries/2015-May/025723.html have
 been overcome] since #8189 was fixed, so is there any reason that we
 couldn't also redefine `bimapM = bitraverse` and `bisequence =
 bisequenceA`?

 Other than that, I don't see any reason why we couldn't migrate
 `Data.Bifoldable` and `Data.Bitraversable` as they're implemented right
 now. One thing that was a concern for `Foldable` (#9621) was turning
 functions like `toList` into class methods for efficiency purposes, but I
 can't think of a `Bifoldable` instance that would benefit significantly
 from this, so we can probably leave that aside.

--
Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/10448#comment:4>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler


More information about the ghc-tickets mailing list