#6040: Adding a type signature changes heap allocation into stack allocation
without changing the actual type
------------------------------+---------------------------------------------
 Reporter:  tibbe             |          Owner:                  
     Type:  bug               |         Status:  new             
 Priority:  normal            |      Component:  Compiler        
  Version:  7.4.1             |       Keywords:                  
       Os:  Unknown/Multiple  |   Architecture:  Unknown/Multiple
  Failure:  None/Unknown      |       Testcase:                  
Blockedby:                    |       Blocking:                  
  Related:                    |  
------------------------------+---------------------------------------------
 According to Milan Straka, changing

 {{{
 insert :: Ord k => k -> a -> Map k a -> Map k a
 insert = go
   where
     STRICT_1_OF_3(go)
     go kx x Tip = singleton kx x
     go kx x (Bin sz ky y l r) = ...
 }}}

 to

 {{{
 insert :: Ord k => k -> a -> Map k a -> Map k a
 insert = go
   where
     go :: Ord k => k -> a -> Map k a -> Map k a
     STRICT_1_OF_3(go)
     go kx x Tip = singleton kx x
     go kx x (Bin sz ky y l r) = ...
 }}}

 changes how GHC allocates the argument, from heap to stack. Here's the
 relevant commit:
 
https://github.com/haskell/containers/commit/32d84ba5eb82f34dbb8a8fabf07077d848cdb408

 It includes this comment:
 {{{
 -- [Note: Type of local 'go' function]
 -- ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
 -- If the local 'go' function uses an Ord class, it must be given a type
 -- which mentions this Ord class. Otherwise it is not passed as an
 argument and
 -- it is instead heap-allocated at the entry of the outer method.
 }}}

 I find this quite alarming. The type of `k` above is already Ord k, so the
 extra type signature shouldn't make a difference in my opinion.

-- 
Ticket URL: <http://hackage.haskell.org/trac/ghc/ticket/6040>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler

_______________________________________________
Glasgow-haskell-bugs mailing list
Glasgow-haskell-bugs@haskell.org
http://www.haskell.org/mailman/listinfo/glasgow-haskell-bugs

Reply via email to