exprType incorrect for let expressions which bind types
The exprType
function in CoreUtils doesn't handle let expressions which bind type variables correctly. Consider:
let a = Int
in \ $dNum x y -> (+) a $dNum x y
exprType
on this expression will give: Num a => a -> a -> a
instead of Num Int => Int -> Int -> Int
Obviously the core lint checker does the right thing, so I modified exprType (see attached patch) to do what it does. I'm guessing that exprType isn't used in any crucial capacity (or let-bound types are not that common) or the fact that a
is unbound in the result would be a big problem. That said, we use this function heavily in HERMIT... is there another we should be using instead?
Any chance this can make the 7.8 window?
Trac metadata
Trac field | Value |
---|---|
Version | 7.6.3 |
Type | Bug |
TypeOfFailure | OtherFailure |
Priority | high |
Resolution | Unresolved |
Component | Compiler |
Test case | |
Differential revisions | |
BlockedBy | |
Related | |
Blocking | |
CC | |
Operating system | |
Architecture |