
Would something like this work for you? import Type.Reflection import Data.Dynamic apD :: Typeable f => (forall a. a -> f a) -> Dynamic -> Dynamic apD f (Dynamic t a) = withTypeable t $ Dynamic typeRep (f a) - Vlad
On 12 Apr 2021, at 14:34, YueCompl via ghc-devs
wrote: Dear Cafe and GHC devs,
There used to be a "principled way with pattern match on the constructor":
```hs data Dynamic where Dynamic :: Typeable a => a -> Dynamic
apD :: Typeable f => (forall a. a -> f a) -> Dynamic -> Dynamic apD f (Dynamic a) = Dynamic $ f a ``` Source: https://www.reddit.com/r/haskell/comments/2kdcca/q_how_to_apply_a_polymorphi...
But now with GHC 8.8 as in my case, `Dynamic` constructor has changed its signature to:
```hs Dynamic :: forall a. TypeRep a -> a -> Dynamic ```
Which renders the `apD` not working anymore.
And it seems missing dependencies now for an older solution Edward KMETT provides:
```hs apD :: forall f. Typeable1 f => (forall a. a -> f a) -> Dynamic -> Dynamic apD f a = dynApp df a where t = dynTypeRep a df = reify (mkFunTy t (typeOf1 (undefined :: f ()) `mkAppTy` t)) $ \(_ :: Proxy s) -> toDyn (WithRep f :: WithRep s (() -> f ())) ``` Source: https://stackoverflow.com/questions/10889682/how-to-apply-a-polymorphic-func...
So, how can I do that nowadays?
Thanks, Compl
_______________________________________________ ghc-devs mailing list ghc-devs@haskell.org http://mail.haskell.org/cgi-bin/mailman/listinfo/ghc-devs