[GHC] #4108: GHC.Integer.hashInteger is a misnomer and confuses
people
GHC
cvs-ghc at haskell.org
Tue Jun 15 08:49:35 EDT 2010
#4108: GHC.Integer.hashInteger is a misnomer and confuses people
---------------------------+------------------------------------------------
Reporter: duncan | Owner:
Type: bug | Status: new
Priority: normal | Milestone: 6.14.1
Component: Compiler | Version: 6.12.2
Resolution: | Keywords:
Difficulty: | Os: Unknown/Multiple
Testcase: | Architecture: Unknown/Multiple
Failure: None/Unknown |
---------------------------+------------------------------------------------
Comment(by simonmar):
I just took a look at this, and I think 'hashInteger' is actually wrong:
{{{
hashInteger :: Integer -> Int#
hashInteger (S# i) = i
hashInteger (J# s d) = if s ==# 0#
then 0#
else indexIntArray# d 0#
}}}
Suppose the `Integer` is `-j` for some `j` and fits in `Int#`. If the
representation is `S#` then `hashInteger` returns `-j`, but if the
representation is `J#` then `hashInteger` returns `j`. We don't guarantee
to represent an `Integer` using `S#` if it fits in an `Int#`, so I think
this is wrong.
--
Ticket URL: <http://hackage.haskell.org/trac/ghc/ticket/4108#comment:6>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler
More information about the Glasgow-haskell-bugs
mailing list