
Hey David,
could you exposit what would go wrong? a concrete proof witness or
explanation would help me a lot. other people might benefit too.
for the stateT s Maybe a, perhaps i'm still waking up this AM, so let me
try
newtype StateT s m a = StateT {runStateT :: s -> m (a, s)}
so this should expand to
'(s -> Maybe (a,s)),'
but the coerce would be on the 'a' here ... so i'm not seeing the issue?
the latter example seem to boil down to "a free appplicative/functor Gadt"
with some extra bits, though i've not worked through to seeing the unsafety
for the latter examples, the definitions are the following :
traverseBia https://hackage.haskell.org/package/bifunctors-5.5.9/docs/src/Data.Biapplica...
:: (Traversable t
https://hackage.haskell.org/package/bifunctors-5.5.9/docs/src/Data.Biapplica...,
Biapplicative https://hackage.haskell.org/package/bifunctors-5.5.9/docs/src/Data.Biapplica...
p https://hackage.haskell.org/package/bifunctors-5.5.9/docs/src/Data.Biapplica...)
=> (a
https://hackage.haskell.org/package/bifunctors-5.5.9/docs/src/Data.Biapplica...
-> p https://hackage.haskell.org/package/bifunctors-5.5.9/docs/src/Data.Biapplica...
b https://hackage.haskell.org/package/bifunctors-5.5.9/docs/src/Data.Biapplica...
c https://hackage.haskell.org/package/bifunctors-5.5.9/docs/src/Data.Biapplica...)
-> t https://hackage.haskell.org/package/bifunctors-5.5.9/docs/src/Data.Biapplica...
a https://hackage.haskell.org/package/bifunctors-5.5.9/docs/src/Data.Biapplica...
-> p https://hackage.haskell.org/package/bifunctors-5.5.9/docs/src/Data.Biapplica...
(t https://hackage.haskell.org/package/bifunctors-5.5.9/docs/src/Data.Biapplica...
b https://hackage.haskell.org/package/bifunctors-5.5.9/docs/src/Data.Biapplica...)
(t https://hackage.haskell.org/package/bifunctors-5.5.9/docs/src/Data.Biapplica...
c https://hackage.haskell.org/package/bifunctors-5.5.9/docs/src/Data.Biapplica...)traverseBia
https://hackage.haskell.org/package/bifunctors-5.5.9/docs/src/Data.Biapplica...
= inline (traverseBiaWith
https://hackage.haskell.org/package/bifunctors-5.5.9/docs/src/Data.Biapplica...
traverse)
--------
traverseBiaWith
https://hackage.haskell.org/package/bifunctors-5.5.9/docs/src/Data.Biapplica...
:: forall p https://hackage.haskell.org/package/bifunctors-5.5.9/docs/src/Data.Biapplica...
a https://hackage.haskell.org/package/bifunctors-5.5.9/docs/src/Data.Biapplica...
b https://hackage.haskell.org/package/bifunctors-5.5.9/docs/src/Data.Biapplica...
c https://hackage.haskell.org/package/bifunctors-5.5.9/docs/src/Data.Biapplica...
s https://hackage.haskell.org/package/bifunctors-5.5.9/docs/src/Data.Biapplica...
t https://hackage.haskell.org/package/bifunctors-5.5.9/docs/src/Data.Biapplica....
Biapplicative https://hackage.haskell.org/package/bifunctors-5.5.9/docs/src/Data.Biapplica...
p https://hackage.haskell.org/package/bifunctors-5.5.9/docs/src/Data.Biapplica...
=> (forall f https://hackage.haskell.org/package/bifunctors-5.5.9/docs/src/Data.Biapplica...
x https://hackage.haskell.org/package/bifunctors-5.5.9/docs/src/Data.Biapplica....
Applicative f https://hackage.haskell.org/package/bifunctors-5.5.9/docs/src/Data.Biapplica...
=> (a https://hackage.haskell.org/package/bifunctors-5.5.9/docs/src/Data.Biapplica...
-> f https://hackage.haskell.org/package/bifunctors-5.5.9/docs/src/Data.Biapplica...
x https://hackage.haskell.org/package/bifunctors-5.5.9/docs/src/Data.Biapplica...)
-> s https://hackage.haskell.org/package/bifunctors-5.5.9/docs/src/Data.Biapplica...
-> f https://hackage.haskell.org/package/bifunctors-5.5.9/docs/src/Data.Biapplica...
(t https://hackage.haskell.org/package/bifunctors-5.5.9/docs/src/Data.Biapplica...
x https://hackage.haskell.org/package/bifunctors-5.5.9/docs/src/Data.Biapplica...))
-> (a https://hackage.haskell.org/package/bifunctors-5.5.9/docs/src/Data.Biapplica...
-> p https://hackage.haskell.org/package/bifunctors-5.5.9/docs/src/Data.Biapplica...
b https://hackage.haskell.org/package/bifunctors-5.5.9/docs/src/Data.Biapplica...
c https://hackage.haskell.org/package/bifunctors-5.5.9/docs/src/Data.Biapplica...)
-> s https://hackage.haskell.org/package/bifunctors-5.5.9/docs/src/Data.Biapplica...
-> p https://hackage.haskell.org/package/bifunctors-5.5.9/docs/src/Data.Biapplica...
(t https://hackage.haskell.org/package/bifunctors-5.5.9/docs/src/Data.Biapplica...
b https://hackage.haskell.org/package/bifunctors-5.5.9/docs/src/Data.Biapplica...)
(t https://hackage.haskell.org/package/bifunctors-5.5.9/docs/src/Data.Biapplica...
c https://hackage.haskell.org/package/bifunctors-5.5.9/docs/src/Data.Biapplica...)traverseBiaWith
https://hackage.haskell.org/package/bifunctors-5.5.9/docs/src/Data.Biapplica...
trav https://hackage.haskell.org/package/bifunctors-5.5.9/docs/src/Data.Biapplica...
p https://hackage.haskell.org/package/bifunctors-5.5.9/docs/src/Data.Biapplica...
s https://hackage.haskell.org/package/bifunctors-5.5.9/docs/src/Data.Biapplica...
= smash https://hackage.haskell.org/package/bifunctors-5.5.9/docs/src/Data.Biapplica...
p https://hackage.haskell.org/package/bifunctors-5.5.9/docs/src/Data.Biapplica...
(trav https://hackage.haskell.org/package/bifunctors-5.5.9/docs/src/Data.Biapplica...
One https://hackage.haskell.org/package/bifunctors-5.5.9/docs/src/Data.Biapplica...
s https://hackage.haskell.org/package/bifunctors-5.5.9/docs/src/Data.Biapplica...)
-------
smash https://hackage.haskell.org/package/bifunctors-5.5.9/docs/src/Data.Biapplica...
:: forall p https://hackage.haskell.org/package/bifunctors-5.5.9/docs/src/Data.Biapplica...
t https://hackage.haskell.org/package/bifunctors-5.5.9/docs/src/Data.Biapplica...
a https://hackage.haskell.org/package/bifunctors-5.5.9/docs/src/Data.Biapplica...
b https://hackage.haskell.org/package/bifunctors-5.5.9/docs/src/Data.Biapplica...
c https://hackage.haskell.org/package/bifunctors-5.5.9/docs/src/Data.Biapplica....
Biapplicative https://hackage.haskell.org/package/bifunctors-5.5.9/docs/src/Data.Biapplica...
p https://hackage.haskell.org/package/bifunctors-5.5.9/docs/src/Data.Biapplica...
=> (a https://hackage.haskell.org/package/bifunctors-5.5.9/docs/src/Data.Biapplica...
-> p https://hackage.haskell.org/package/bifunctors-5.5.9/docs/src/Data.Biapplica...
b https://hackage.haskell.org/package/bifunctors-5.5.9/docs/src/Data.Biapplica...
c https://hackage.haskell.org/package/bifunctors-5.5.9/docs/src/Data.Biapplica...)
-> (forall x
https://hackage.haskell.org/package/bifunctors-5.5.9/docs/src/Data.Biapplica....
Mag https://hackage.haskell.org/package/bifunctors-5.5.9/docs/src/Data.Biapplica...
a https://hackage.haskell.org/package/bifunctors-5.5.9/docs/src/Data.Biapplica...
x https://hackage.haskell.org/package/bifunctors-5.5.9/docs/src/Data.Biapplica...
(t https://hackage.haskell.org/package/bifunctors-5.5.9/docs/src/Data.Biapplica...
x https://hackage.haskell.org/package/bifunctors-5.5.9/docs/src/Data.Biapplica...))
-> p https://hackage.haskell.org/package/bifunctors-5.5.9/docs/src/Data.Biapplica...
(t https://hackage.haskell.org/package/bifunctors-5.5.9/docs/src/Data.Biapplica...
b https://hackage.haskell.org/package/bifunctors-5.5.9/docs/src/Data.Biapplica...)
(t https://hackage.haskell.org/package/bifunctors-5.5.9/docs/src/Data.Biapplica...
c https://hackage.haskell.org/package/bifunctors-5.5.9/docs/src/Data.Biapplica...)smash
https://hackage.haskell.org/package/bifunctors-5.5.9/docs/src/Data.Biapplica...
p https://hackage.haskell.org/package/bifunctors-5.5.9/docs/src/Data.Biapplica...
m https://hackage.haskell.org/package/bifunctors-5.5.9/docs/src/Data.Biapplica...
= go https://hackage.haskell.org/package/bifunctors-5.5.9/docs/src/Data.Biapplica...
m https://hackage.haskell.org/package/bifunctors-5.5.9/docs/src/Data.Biapplica...
m https://hackage.haskell.org/package/bifunctors-5.5.9/docs/src/Data.Biapplica...
where go https://hackage.haskell.org/package/bifunctors-5.5.9/docs/src/Data.Biapplica...
:: forall x https://hackage.haskell.org/package/bifunctors-5.5.9/docs/src/Data.Biapplica...
y https://hackage.haskell.org/package/bifunctors-5.5.9/docs/src/Data.Biapplica....
Mag https://hackage.haskell.org/package/bifunctors-5.5.9/docs/src/Data.Biapplica...
a https://hackage.haskell.org/package/bifunctors-5.5.9/docs/src/Data.Biapplica...
b https://hackage.haskell.org/package/bifunctors-5.5.9/docs/src/Data.Biapplica...
x https://hackage.haskell.org/package/bifunctors-5.5.9/docs/src/Data.Biapplica...
-> Mag https://hackage.haskell.org/package/bifunctors-5.5.9/docs/src/Data.Biapplica...
a https://hackage.haskell.org/package/bifunctors-5.5.9/docs/src/Data.Biapplica...
c https://hackage.haskell.org/package/bifunctors-5.5.9/docs/src/Data.Biapplica...
y https://hackage.haskell.org/package/bifunctors-5.5.9/docs/src/Data.Biapplica...
-> p https://hackage.haskell.org/package/bifunctors-5.5.9/docs/src/Data.Biapplica...
x https://hackage.haskell.org/package/bifunctors-5.5.9/docs/src/Data.Biapplica...
y https://hackage.haskell.org/package/bifunctors-5.5.9/docs/src/Data.Biapplica...
go https://hackage.haskell.org/package/bifunctors-5.5.9/docs/src/Data.Biapplica...
(Pure https://hackage.haskell.org/package/bifunctors-5.5.9/docs/src/Data.Biapplica...
t https://hackage.haskell.org/package/bifunctors-5.5.9/docs/src/Data.Biapplica...)
(Pure https://hackage.haskell.org/package/bifunctors-5.5.9/docs/src/Data.Biapplica...
u https://hackage.haskell.org/package/bifunctors-5.5.9/docs/src/Data.Biapplica...)
= bipure https://hackage.haskell.org/package/bifunctors-5.5.9/docs/src/Data.Biapplica...
t https://hackage.haskell.org/package/bifunctors-5.5.9/docs/src/Data.Biapplica...
u https://hackage.haskell.org/package/bifunctors-5.5.9/docs/src/Data.Biapplica...
go https://hackage.haskell.org/package/bifunctors-5.5.9/docs/src/Data.Biapplica...
(Map https://hackage.haskell.org/package/bifunctors-5.5.9/docs/src/Data.Biapplica...
f https://hackage.haskell.org/package/bifunctors-5.5.9/docs/src/Data.Biapplica...
x https://hackage.haskell.org/package/bifunctors-5.5.9/docs/src/Data.Biapplica...)
(Map https://hackage.haskell.org/package/bifunctors-5.5.9/docs/src/Data.Biapplica...
g https://hackage.haskell.org/package/bifunctors-5.5.9/docs/src/Data.Biapplica...
y https://hackage.haskell.org/package/bifunctors-5.5.9/docs/src/Data.Biapplica...)
= bimap f https://hackage.haskell.org/package/bifunctors-5.5.9/docs/src/Data.Biapplica...
g https://hackage.haskell.org/package/bifunctors-5.5.9/docs/src/Data.Biapplica...
(go https://hackage.haskell.org/package/bifunctors-5.5.9/docs/src/Data.Biapplica...
x https://hackage.haskell.org/package/bifunctors-5.5.9/docs/src/Data.Biapplica...
y https://hackage.haskell.org/package/bifunctors-5.5.9/docs/src/Data.Biapplica...)
go https://hackage.haskell.org/package/bifunctors-5.5.9/docs/src/Data.Biapplica...
(Ap https://hackage.haskell.org/package/bifunctors-5.5.9/docs/src/Data.Biapplica...
fs https://hackage.haskell.org/package/bifunctors-5.5.9/docs/src/Data.Biapplica...
xs https://hackage.haskell.org/package/bifunctors-5.5.9/docs/src/Data.Biapplica...)
(Ap https://hackage.haskell.org/package/bifunctors-5.5.9/docs/src/Data.Biapplica...
gs https://hackage.haskell.org/package/bifunctors-5.5.9/docs/src/Data.Biapplica...
ys https://hackage.haskell.org/package/bifunctors-5.5.9/docs/src/Data.Biapplica...)
= go https://hackage.haskell.org/package/bifunctors-5.5.9/docs/src/Data.Biapplica...
fs https://hackage.haskell.org/package/bifunctors-5.5.9/docs/src/Data.Biapplica...
gs https://hackage.haskell.org/package/bifunctors-5.5.9/docs/src/Data.Biapplica...
<<*>> https://hackage.haskell.org/package/bifunctors-5.5.9/docs/src/Data.Biapplica...
go https://hackage.haskell.org/package/bifunctors-5.5.9/docs/src/Data.Biapplica...
xs https://hackage.haskell.org/package/bifunctors-5.5.9/docs/src/Data.Biapplica...
ys https://hackage.haskell.org/package/bifunctors-5.5.9/docs/src/Data.Biapplica...
#if MIN_VERSION_base(4,10,0) go
https://hackage.haskell.org/package/bifunctors-5.5.9/docs/src/Data.Biapplica...
(LiftA2 https://hackage.haskell.org/package/bifunctors-5.5.9/docs/src/Data.Biapplica...
f https://hackage.haskell.org/package/bifunctors-5.5.9/docs/src/Data.Biapplica...
xs https://hackage.haskell.org/package/bifunctors-5.5.9/docs/src/Data.Biapplica...
ys https://hackage.haskell.org/package/bifunctors-5.5.9/docs/src/Data.Biapplica...)
(LiftA2 https://hackage.haskell.org/package/bifunctors-5.5.9/docs/src/Data.Biapplica...
g https://hackage.haskell.org/package/bifunctors-5.5.9/docs/src/Data.Biapplica...
zs https://hackage.haskell.org/package/bifunctors-5.5.9/docs/src/Data.Biapplica...
ws https://hackage.haskell.org/package/bifunctors-5.5.9/docs/src/Data.Biapplica...)
= biliftA2 https://hackage.haskell.org/package/bifunctors-5.5.9/docs/src/Data.Biapplica...
f https://hackage.haskell.org/package/bifunctors-5.5.9/docs/src/Data.Biapplica...
g https://hackage.haskell.org/package/bifunctors-5.5.9/docs/src/Data.Biapplica...
(go https://hackage.haskell.org/package/bifunctors-5.5.9/docs/src/Data.Biapplica...
xs https://hackage.haskell.org/package/bifunctors-5.5.9/docs/src/Data.Biapplica...
zs https://hackage.haskell.org/package/bifunctors-5.5.9/docs/src/Data.Biapplica...)
(go https://hackage.haskell.org/package/bifunctors-5.5.9/docs/src/Data.Biapplica...
ys https://hackage.haskell.org/package/bifunctors-5.5.9/docs/src/Data.Biapplica...
ws https://hackage.haskell.org/package/bifunctors-5.5.9/docs/src/Data.Biapplica...)
#endif go https://hackage.haskell.org/package/bifunctors-5.5.9/docs/src/Data.Biapplica...
(One https://hackage.haskell.org/package/bifunctors-5.5.9/docs/src/Data.Biapplica...
x https://hackage.haskell.org/package/bifunctors-5.5.9/docs/src/Data.Biapplica...)
(One https://hackage.haskell.org/package/bifunctors-5.5.9/docs/src/Data.Biapplica...
_) = p https://hackage.haskell.org/package/bifunctors-5.5.9/docs/src/Data.Biapplica...
x https://hackage.haskell.org/package/bifunctors-5.5.9/docs/src/Data.Biapplica...
go https://hackage.haskell.org/package/bifunctors-5.5.9/docs/src/Data.Biapplica...
_ _ = impossibleError
https://hackage.haskell.org/package/bifunctors-5.5.9/docs/src/Data.Biapplica...
---- and then the magma is
-- This is used to reify a traversal for 'traverseBia'. It's a
somewhat-- bogus 'Functor' and 'Applicative' closely related to
'Magma' from the-- @lens@ package. Valid traversals don't use (<$),
(<*), or (*>), so-- we leave them out. We offer all the rest of the
Functor and Applicative-- operations to improve performance: we
generally want to keep the structure-- as small as possible. We might
even consider using RULES to widen lifts-- when we can:---- liftA2 f
x y <*> z ==> liftA3 f x y z,---- etc., up to the pointer tagging
limit. But we do need to be careful. I don't-- *think* GHC will ever
inline the traversal into the go function (because that-- would
duplicate work), but if it did, and if different RULES fired for the--
two copies, everything would break horribly.---- Note: if it's
necessary for some reason, we *could* relax GADTs to--
ExistentialQuantification by changing the type of One to---- One ::
(b -> c) -> a -> Mag a b c---- where the function will always end up
being id. But we allocate a *lot*-- of One constructors, so this would
definitely be bad for performance.data Mag
https://hackage.haskell.org/package/bifunctors-5.5.9/docs/src/Data.Biapplica...
a https://hackage.haskell.org/package/bifunctors-5.5.9/docs/src/Data.Biapplica...
b https://hackage.haskell.org/package/bifunctors-5.5.9/docs/src/Data.Biapplica...
t https://hackage.haskell.org/package/bifunctors-5.5.9/docs/src/Data.Biapplica...
where Pure https://hackage.haskell.org/package/bifunctors-5.5.9/docs/src/Data.Biapplica...
:: t https://hackage.haskell.org/package/bifunctors-5.5.9/docs/src/Data.Biapplica...
-> Mag https://hackage.haskell.org/package/bifunctors-5.5.9/docs/src/Data.Biapplica...
a https://hackage.haskell.org/package/bifunctors-5.5.9/docs/src/Data.Biapplica...
b https://hackage.haskell.org/package/bifunctors-5.5.9/docs/src/Data.Biapplica...
t https://hackage.haskell.org/package/bifunctors-5.5.9/docs/src/Data.Biapplica...
Map https://hackage.haskell.org/package/bifunctors-5.5.9/docs/src/Data.Biapplica...
:: (x https://hackage.haskell.org/package/bifunctors-5.5.9/docs/src/Data.Biapplica...
-> t https://hackage.haskell.org/package/bifunctors-5.5.9/docs/src/Data.Biapplica...)
-> Mag https://hackage.haskell.org/package/bifunctors-5.5.9/docs/src/Data.Biapplica...
a https://hackage.haskell.org/package/bifunctors-5.5.9/docs/src/Data.Biapplica...
b https://hackage.haskell.org/package/bifunctors-5.5.9/docs/src/Data.Biapplica...
x https://hackage.haskell.org/package/bifunctors-5.5.9/docs/src/Data.Biapplica...
-> Mag https://hackage.haskell.org/package/bifunctors-5.5.9/docs/src/Data.Biapplica...
a https://hackage.haskell.org/package/bifunctors-5.5.9/docs/src/Data.Biapplica...
b https://hackage.haskell.org/package/bifunctors-5.5.9/docs/src/Data.Biapplica...
t https://hackage.haskell.org/package/bifunctors-5.5.9/docs/src/Data.Biapplica...
Ap https://hackage.haskell.org/package/bifunctors-5.5.9/docs/src/Data.Biapplica...
:: Mag https://hackage.haskell.org/package/bifunctors-5.5.9/docs/src/Data.Biapplica...
a https://hackage.haskell.org/package/bifunctors-5.5.9/docs/src/Data.Biapplica...
b https://hackage.haskell.org/package/bifunctors-5.5.9/docs/src/Data.Biapplica...
(t https://hackage.haskell.org/package/bifunctors-5.5.9/docs/src/Data.Biapplica...
-> u https://hackage.haskell.org/package/bifunctors-5.5.9/docs/src/Data.Biapplica...)
-> Mag https://hackage.haskell.org/package/bifunctors-5.5.9/docs/src/Data.Biapplica...
a https://hackage.haskell.org/package/bifunctors-5.5.9/docs/src/Data.Biapplica...
b https://hackage.haskell.org/package/bifunctors-5.5.9/docs/src/Data.Biapplica...
t https://hackage.haskell.org/package/bifunctors-5.5.9/docs/src/Data.Biapplica...
-> Mag https://hackage.haskell.org/package/bifunctors-5.5.9/docs/src/Data.Biapplica...
a https://hackage.haskell.org/package/bifunctors-5.5.9/docs/src/Data.Biapplica...
b https://hackage.haskell.org/package/bifunctors-5.5.9/docs/src/Data.Biapplica...
u https://hackage.haskell.org/package/bifunctors-5.5.9/docs/src/Data.Biapplica...
#if MIN_VERSION_base(4,10,0) LiftA2
https://hackage.haskell.org/package/bifunctors-5.5.9/docs/src/Data.Biapplica...
:: (t https://hackage.haskell.org/package/bifunctors-5.5.9/docs/src/Data.Biapplica...
-> u https://hackage.haskell.org/package/bifunctors-5.5.9/docs/src/Data.Biapplica...
-> v https://hackage.haskell.org/package/bifunctors-5.5.9/docs/src/Data.Biapplica...)
-> Mag https://hackage.haskell.org/package/bifunctors-5.5.9/docs/src/Data.Biapplica...
a https://hackage.haskell.org/package/bifunctors-5.5.9/docs/src/Data.Biapplica...
b https://hackage.haskell.org/package/bifunctors-5.5.9/docs/src/Data.Biapplica...
t https://hackage.haskell.org/package/bifunctors-5.5.9/docs/src/Data.Biapplica...
-> Mag https://hackage.haskell.org/package/bifunctors-5.5.9/docs/src/Data.Biapplica...
a https://hackage.haskell.org/package/bifunctors-5.5.9/docs/src/Data.Biapplica...
b https://hackage.haskell.org/package/bifunctors-5.5.9/docs/src/Data.Biapplica...
u https://hackage.haskell.org/package/bifunctors-5.5.9/docs/src/Data.Biapplica...
-> Mag https://hackage.haskell.org/package/bifunctors-5.5.9/docs/src/Data.Biapplica...
a https://hackage.haskell.org/package/bifunctors-5.5.9/docs/src/Data.Biapplica...
b https://hackage.haskell.org/package/bifunctors-5.5.9/docs/src/Data.Biapplica...
v https://hackage.haskell.org/package/bifunctors-5.5.9/docs/src/Data.Biapplica...
#endif One https://hackage.haskell.org/package/bifunctors-5.5.9/docs/src/Data.Biapplica...
:: a https://hackage.haskell.org/package/bifunctors-5.5.9/docs/src/Data.Biapplica...
-> Mag https://hackage.haskell.org/package/bifunctors-5.5.9/docs/src/Data.Biapplica...
a https://hackage.haskell.org/package/bifunctors-5.5.9/docs/src/Data.Biapplica...
b https://hackage.haskell.org/package/bifunctors-5.5.9/docs/src/Data.Biapplica...
b https://hackage.haskell.org/package/bifunctors-5.5.9/docs/src/Data.Biapplica...instance
Functor (Mag https://hackage.haskell.org/package/bifunctors-5.5.9/docs/src/Data.Biapplica...
a https://hackage.haskell.org/package/bifunctors-5.5.9/docs/src/Data.Biapplica...
b https://hackage.haskell.org/package/bifunctors-5.5.9/docs/src/Data.Biapplica...)
where fmap = Map
https://hackage.haskell.org/package/bifunctors-5.5.9/docs/src/Data.Biapplica...instance
Applicative (Mag
https://hackage.haskell.org/package/bifunctors-5.5.9/docs/src/Data.Biapplica...
a https://hackage.haskell.org/package/bifunctors-5.5.9/docs/src/Data.Biapplica...
b https://hackage.haskell.org/package/bifunctors-5.5.9/docs/src/Data.Biapplica...)
where pure = Pure
https://hackage.haskell.org/package/bifunctors-5.5.9/docs/src/Data.Biapplica...
(<*>) = Ap https://hackage.haskell.org/package/bifunctors-5.5.9/docs/src/Data.Biapplica...
#if MIN_VERSION_base(4,10,0) liftA2 = LiftA2
https://hackage.haskell.org/package/bifunctors-5.5.9/docs/src/Data.Biapplica...
#endif
On Sun, Jan 3, 2021 at 11:09 AM David Feuer
You're not being very imaginative at all. Try out, oh, `StateT s Maybe`. Or play around with a nice fake functor like the magma used to implement `traverseBia` in `bifunctors`—pretty sure that won't work out.
On Sun, Jan 3, 2021, 11:00 AM Carter Schonwald
wrote: Hey everyone!
for context, I have some code where I was seeing how far coerce lets me go to avoid doing wrappers for certain codes,
i found i had to write the following (mapping an operation over to its newtyped sibling)
``` -- > :t QRA.wither --- forall a b f . Applicative f => (a -> f (Maybe b)) -> RAList a -> f (RAList b) --- wither :: forall a b f . (Applicative f, (forall c d . Coercible c d => Coercible (f c) (f d)) ) => (a -> f (Maybe b)) -> RAList a -> f (RAList b) wither = \f la -> coerce $ QRA.wither f $ coerce la ```
i'd much rather be able to write ``` wither :: forall a b f . (Applicative f) => (a -> f (Maybe b)) -> RAList a -> f (RAList b) wither = \f la -> coerce $ QRA.wither f $ coerce la ```
this seems like it'd be best done via something like changing the functor class definition to
``` class (forall c d . Coercible c d => Coercible (f c) (f d)) ) => Functor f where .. ```
is there any specific reason why this is not feasible? I cant think of a GADT where this wouldn't be totally safe to do (because unlike in foldable, f is in both the domain and co-domain), but maybe i'm not being imaginative enough?
look forward to learning what our obstacles are to making this happen for ghc 9.2 :)
-Carter
_______________________________________________ Libraries mailing list Libraries@haskell.org http://mail.haskell.org/cgi-bin/mailman/listinfo/libraries