I don't know what all that means exactly (especially since GHC's demand
signatures have changed recently in a way I don't understand at all). But
for hiding divergence, one option is to use a module with demand analysis
disabled. Try {-# options_ghc -fno-strictness #-}. You'll likely need to
put oops in its own module to avoid interfering with desired optimizations.On Fri, Jan 20, 2023, 4:36 AM Michael Sperber <[email protected]> wrote: > > I'm trying to port Conal Elliott's ConCat plugin from ghc 8 to 9, and > the divergence checker foils me. > > Background: The plugin works by transforming calls to a pseudo-function > toCcc' defined like so: > > -- | Pseudo function to trigger rewriting to TOCCC form. > toCcc' :: forall k a b. (a -> b) -> (a `k` b) > toCcc' _ = oops "toCcc' called" > {-# NOINLINE toCcc' #-} > > For ghc 8, oops was defined like so: > > module ConCat.Misc where > > -- | Pseudo function to fool GHC's divergence checker. > oops :: String -> b > oops str = errorWithStackTrace ("Oops: "++str) > {-# NOINLINE oops #-} > > ... but unfortunately, ghc 9 is not so easily fooled and reports <A>x > for toCcc'. Is there any way to prevent this that works for ghc 9? > > Help would be much appreciated! > > -- > Regards, > Mike > _______________________________________________ > Glasgow-haskell-users mailing list > [email protected] > http://mail.haskell.org/cgi-bin/mailman/listinfo/glasgow-haskell-users >
_______________________________________________ Glasgow-haskell-users mailing list [email protected] http://mail.haskell.org/cgi-bin/mailman/listinfo/glasgow-haskell-users
