Move `Data.Profunctor` from `profunctors` package to `base`
Contravariant
was added in GHC 8.6.
Profunctor
also looks like fundamental abstraction to be worth considering adding to base
.
Having both Profunctor
and Choice
typeclasses in the base
library will also allow to write microprism
package similar to microlens
. Prisms often turns to be very useful since they allow to work nicely with sum types.
type Prism s t a b = forall p f. (Choice p, Applicative f) => p a (f b) -> p s (f t)
Additional context for this ticket from Reddit:
It was proposed on Reddit to use QuantifiedConstraints
for Profunctor
. I'm not quite fluent with QuantifiedConstraints
, but I think this may looks like this (mostly copy-pasting code from profunctors
package):
{-# LANGUAGE QuantifiedConstraints #-}
class (forall a . Functor (p a)) => Profunctor p where
{-# MINIMAL dimap | (lmap, rmap) #-}
dimap :: (a -> b) -> (c -> d) -> p b c -> p a d
dimap f g = lmap f . rmap g
lmap :: (a -> b) -> p b c -> p a c
lmap f = dimap f id
rmap :: (b -> c) -> p a b -> p a c
rmap = dimap id
instance Profunctor (->) where
dimap ab cd bc = cd . bc . ab
lmap = flip (.)
rmap = (.)
Trac metadata
Trac field | Value |
---|---|
Version | 8.6.3 |
Type | FeatureRequest |
TypeOfFailure | OtherFailure |
Priority | normal |
Resolution | Unresolved |
Component | Core Libraries |
Test case | |
Differential revisions | |
BlockedBy | |
Related | |
Blocking | |
CC | andrewthad, ekmett |
Operating system | |
Architecture |