Re: [GHC] #13615: Nondeterminism in ‘pure’ function w/ parallel evaluation & memo combinators

GHC ghc-devs at haskell.org
Thu Apr 27 01:37:04 UTC 2017


#13615: Nondeterminism in ‘pure’ function w/ parallel evaluation & memo combinators
-------------------------------------+-------------------------------------
        Reporter:  pacak             |                Owner:  (none)
            Type:  bug               |               Status:  new
        Priority:  highest           |            Milestone:  8.2.1
       Component:  Compiler          |              Version:  8.2.1-rc2
      Resolution:                    |             Keywords:
Operating System:  Unknown/Multiple  |         Architecture:
 Type of failure:  Incorrect result  |  Unknown/Multiple
  at runtime                         |            Test Case:
      Blocked By:                    |             Blocking:
 Related Tickets:                    |  Differential Rev(s):
       Wiki Page:                    |
-------------------------------------+-------------------------------------

Comment (by bgamari):

 Note that the probability of seeing the issue increases markedly if
 `regroup` is defined as,
 {{{#!hs
 regroup :: (NFData a, Show a, Hashable a, Eq a, Ord a) => [(a, Int)] ->
 [(a, Int)]
 regroup xs0 =
     let xs = map (\(x,y) -> (x, y+1)) xs0
         xs' = HM.toList $ HM.fromListWith (+) xs
         s' = sum (map snd xs')
         s  = sum (map snd xs)
      in if s' /= s
             then if show s' == show s
                     then error "WAT????"
                     else error $ "Those are expected to be equal" ++ show
 (s', s)
             else xs'
 }}}

 It appears that elements are getting dropped from the list inspected by
 `fromListWith` (which is why the `(+1)` makes the issue easier to see: you
 won't notice if you drop a zero from a sum)

--
Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/13615#comment:18>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler


More information about the ghc-tickets mailing list