How to fool the divergence checker in ghc 9

David Feuer david.feuer at gmail.com
Fri Jan 20 09:43:57 UTC 2023


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 <sperber at deinprogramm.de>
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
> Glasgow-haskell-users at haskell.org
> http://mail.haskell.org/cgi-bin/mailman/listinfo/glasgow-haskell-users
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.haskell.org/pipermail/glasgow-haskell-users/attachments/20230120/a8f47550/attachment.html>


More information about the Glasgow-haskell-users mailing list