
i guess the issue lies with the `One ` construtor? but the comment along
side this datatype already states that its treated as being "unsafe
coerced" already! so i dont quite see it as creating further issues?
On Sun, Jan 3, 2021 at 11:31 AM Carter Schonwald
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
wrote: 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 < carter.schonwald@gmail.com> 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