Avoiding construction of dead dictionaries

Tom Smeding x at tomsmeding.com
Fri Aug 6 14:55:08 UTC 2021


Would it not be unsound for ghc to elide dictionary construction here? After all, the right-hand side might actually be a bottom (e.g. undefined) at run-time, in which case the pattern match cannot succeed according to the semantics of Haskell. I suspect that if you make the pattern match lazy (i.e. ~(Entail (Sub Dict))) or ignore the argument altogether (i.e. _), dictionary construction will be elided.

- Tom

-------- Original Message --------
On 6 Aug 2021, 15:06, Michael Sperber wrote:

> I have another optimization problem. ConCat includes this definition:
>
> (<+) :: Con a => (Con b => r) -> (a |- b) -> r
> r <+ Entail (Sub Dict) = r
>
> The right-hand argument of <+ leads to a dictionary construction that is
> a proof of a certain property, but the dictionary itself ends up being
> dead, like so:
>
> case $w$dOpCon_r2kGJ ...
> of
> { (# ww1_s27L3 #) -> ... }
> ^^^^^^^^^
> never used
>
> Yet, ghc (8.10.4) never elides this code. (I'm naively assuming because
> of the unboxed tuple, but actually have no clue.)
>
> Is there any chance of convincing ghc of erasing the dictionary
> construction?
>
> 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/20210806/41a5b63b/attachment.html>


More information about the Glasgow-haskell-users mailing list