[GHC] #1488: Code that won't ever be executed should not give
rise to constraints
GHC
trac at galois.com
Wed Jul 4 03:20:41 EDT 2007
#1488: Code that won't ever be executed should not give rise to constraints
----------------------------------+-----------------------------------------
Reporter: iampure at gmail.com | Owner:
Type: feature request | Status: new
Priority: normal | Milestone:
Component: Compiler | Version: 6.6.1
Severity: normal | Resolution:
Keywords: | Difficulty: Moderate (1 day)
Os: Unknown | Testcase:
Architecture: Unknown |
----------------------------------+-----------------------------------------
Old description:
> In the code
>
> a x = let b = show x in 5,
> ghci derives:
> a :: (Show a, Num t) => a -> t, which is correct, but I think the rules
> should be slightly altered, since in reality giving something to a which
> is not an instance of Show wouldn't be a problem, since it's not used in
> the first place.
>
> One important application of this is testing a general data structure for
> one specific element type with assertions in the the general code and
> having a switch to turn generic and non-generic mode on and off.
> Unfortunately, this approach doesn't work today, since all kinds of
> constraints that are essentially part of the debugging process get added.
> Since deciding whether a certain variable is used is very easy in this
> setting(for example CPP macros that expand into "if debugging", where
> debugging will have a constant value. (I don't expect you to solve the
> Halting Problem).
New description:
In the code
{{{
a x = let b = show x in 5,
}}}
ghci derives:
{{{
a :: (Show a, Num t) => a -> t,
}}}
which is correct, but I think the rules should be slightly altered, since
in reality giving something to a which is not an instance of Show wouldn't
be a problem, since it's not used in the first place.
One important application of this is testing a general data structure for
one specific element type with assertions in the the general code and
having a switch to turn generic and non-generic mode on and off.
Unfortunately, this approach doesn't work today, since all kinds of
constraints that are essentially part of the debugging process get added.
Since deciding whether a certain variable is used is very easy in this
setting(for example CPP macros that expand into "if debugging", where
debugging will have a constant value. (I don't expect you to solve the
Halting Problem).
Comment (by simonpj):
Lennart adds: And ghci gives the only sensible answer. Once you start
trying to be clever you're on the slippery slope to undecidability. How
would one know where to stop? I would be most perturbed if Haskell were
to try and ignore "unused" variables.
--
Ticket URL: <http://hackage.haskell.org/trac/ghc/ticket/1488>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler
-------------- next part --------------
_______________________________________________
Glasgow-haskell-bugs mailing list
Glasgow-haskell-bugs at haskell.org
http://www.haskell.org/mailman/listinfo/glasgow-haskell-bugs
More information about the Glasgow-haskell-bugs
mailing list