Advice for #11475
Jonas Scholl
anselm.scholl at tu-harburg.de
Fri Feb 19 11:13:40 UTC 2016
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
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 473 bytes
Desc: OpenPGP digital signature
URL: <http://mail.haskell.org/pipermail/ghc-devs/attachments/20160219/c66cf72a/attachment.sig>
More information about the ghc-devs
mailing list