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 <ghc-devs@haskell.org> 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_polymorphic_function_to_a/ > > > 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-function-to-a-dynamic-value > > > 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 _______________________________________________ ghc-devs mailing list ghc-devs@haskell.org http://mail.haskell.org/cgi-bin/mailman/listinfo/ghc-devs