Hello GHC-Devs, I am currently giving #11475 a try. However I hit a few problems and wanted to ask for a bit of advice about how to proceed.
I already can handle the following:
case x of
A y -> e1
_ -> ....(case x of
B -> r2
C -> r3) ...
My first problem then was the following construct:
case (case ... of ... -> Left x) of
Left y -> ...
Or more simple:
case Left x of
Left y -> ...
So I have to check which constructors the scrutinee may return. I know
the simplifier has to implement such logic somewhere but did not want to
use the implementation for two reasons:
- I didn't know where to find it
- If GHC uses the same test to prune impossible alternatives and to
check if they were pruned correctly, extending the linter is useless. A
bug in the test code will cause also cause a bug in the linter.
So I implemented such a test myself, but now I am stuck at something
like this:
foo a b = a : b
bar = ... case foo a b of
(:) x y -> ...
I cannot see through foo, so I assume it may return (:) and []. The
simplifier on the other hand is able to see through foo and did remove
the [] case, causing my current implementation to throw an incorrect
lint error.
How can I get a list/set of all possible AltCons returned by a
function/constant? Or a list of the impossible ones? I tried to get some
information from the unfolding of a variable, but it seems like
unfoldings are only attached to top-level names.
Jonas
signature.asc
Description: OpenPGP digital signature
_______________________________________________ ghc-devs mailing list [email protected] http://mail.haskell.org/cgi-bin/mailman/listinfo/ghc-devs
