[GHC] #9636: Function with type error accepted
GHC
ghc-devs at haskell.org
Thu Oct 2 10:43:24 UTC 2014
#9636: Function with type error accepted
-------------------------------------+-------------------------------------
Reporter: augustss | Owner:
Type: bug | Status: new
Priority: normal | Milestone:
Component: Compiler | Version: 7.8.3
Resolution: | Keywords:
Operating System: | Architecture: Unknown/Multiple
Unknown/Multiple | Difficulty: Unknown
Type of failure: | Blocked By:
None/Unknown | Related Tickets:
Test Case: |
Blocking: |
Differential Revisions: |
-------------------------------------+-------------------------------------
Comment (by augustss):
Replying to [comment:13 rwbarton]:
> Isn't it analogous to saying that incomplete pattern matches are OK as
long as they are inaccessible? (Which they are.) After all, like you said,
a closed type family is like a function on types. The type expression `T
Bool` has no normal form, for sure, but who says we have to evaluate it?
Yes, it's a lot like a pattern match failure. So let us go with that
analogy for a moment.
Assume we have these definitions:
{{{#!hs
foo :: Int -> Int
foo 0 = 42
bar = foo 5 - foo 5
}}}
Since we know that `x - x = 0` it is tempting to optimize the definition
of `bar` to `bar = 0`. This is, of course, wrong since computing `foo 5`
will result in bottom.
Now compare this to what the type checker does in my original example. It
happily assumes that `T Bool` is equal to `T Bool`, but that's wrong. `T
Bool` is bottom at type checking time and should be reported as such.
I've decided I'm OK with having `T Bool` just floating around in the same
way that I'm OK with having `foo 5` floating around in a lazy language.
Type families introduce partial functions on the type level, and I think
this has to be dealt with. Type expressions can now blow up during type
checking. So at the points when a (closed) type family expression has to
be evaluated, e.g., for equality comparison, and it cannot be reduced then
this should be an error. IMHO.
--
Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/9636#comment:16>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler
More information about the ghc-tickets
mailing list