[GHC] #16173: Move `Data.Profunctor` from `profunctors` package to `base`
GHC
ghc-devs at haskell.org
Sun Jan 13 11:42:29 UTC 2019
#16173: Move `Data.Profunctor` from `profunctors` package to `base`
-------------------------------------+-------------------------------------
Reporter: chshersh | Owner: (none)
Type: feature | Status: new
request |
Priority: normal | Milestone:
Component: Core | Version: 8.6.3
Libraries |
Keywords: base, | Operating System: Unknown/Multiple
profunctor, QuantifiedConstraints |
Architecture: | Type of failure: None/Unknown
Unknown/Multiple |
Test Case: | Blocked By:
Blocking: | Related Tickets: #14767
Differential Rev(s): | Wiki Page:
-------------------------------------+-------------------------------------
`Contravariant` was added in GHC 8.6.
* https://hackage.haskell.org/package/base-4.12.0.0/docs/Data-Functor-
Contravariant.html
`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.
{{{#!hs
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:
*
https://www.reddit.com/r/haskell/comments/8v53cb/announce_ghc_861alpha1_available/e1o1giy/
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):
{{{#!hs
{-# 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 = (.)
}}}
--
Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/16173>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler
More information about the ghc-tickets
mailing list