[GHC] #14187: Transpose hangs on infinite by finite lists

GHC ghc-devs at haskell.org
Wed Sep 6 10:50:51 UTC 2017


#14187: Transpose hangs on infinite by finite lists
-------------------------------------+-------------------------------------
        Reporter:  utikeev           |                Owner:  (none)
            Type:  bug               |               Status:  new
        Priority:  normal            |            Milestone:
       Component:  Compiler          |              Version:  8.2.1
      Resolution:                    |             Keywords:  transpose
Operating System:  Windows           |         Architecture:  x86_64
 Type of failure:  Runtime           |  (amd64)
  performance bug                    |            Test Case:
      Blocked By:                    |             Blocking:
 Related Tickets:                    |  Differential Rev(s):
       Wiki Page:                    |
-------------------------------------+-------------------------------------
Description changed by utikeev:

Old description:

> I found out that this code
>
> {{{#!hs
> take 5 $ map (take 3) (transpose (repeat [0..1]))
> }}}
>
> isn't equivalent to this one
>
> {{{#!hs
> take 5 $ map (take 3) [[0,0..], [1,1..]]
> }}}
>
> The second piece of code gives expectable output of
> {{{[[0,0,0],[1,1,1]]}}}, while first one just hangs with outpit
> {{{[[0,0,0],[1,1,1],}}} also probably screwing up some descriptors after
> interruption with Ctrl+C (as in 8.2.1, didn't have such problem in 8.0.2.
> I attach the screenshot of my cmd after interruption and pressing Up and
> Down buttons randomly for a few times. The history seems to be broken).
>
> In my homework I had to make a function zipN, which is actually zipWith
> but for more than two lists. The solution which dealt with stuck was to
> write my own transpose and apply {{{takeWhile (not . null)}}} to the
> remaining part of transposed matrix.
>
> P.S.:
> {{{#!hs
> [[0,0..],[1,1..]] == transpose (repeat [0..1])
> }}}
> also hangs ghci.

New description:

 I found out that this code

 {{{#!hs
 take 5 $ map (take 3) (transpose (repeat [0..1]))
 }}}

 isn't equivalent to this one

 {{{#!hs
 take 5 $ map (take 3) [[0,0..], [1,1..]]
 }}}

 The second piece of code gives expectable output of
 {{{[[0,0,0],[1,1,1]]}}}, while first one just hangs with output
 {{{[[0,0,0],[1,1,1],}}} also probably screwing up some descriptors after
 interruption with Ctrl+C (as in 8.2.1, didn't have such problem in 8.0.2.
 I attach the screenshot of my cmd after interruption and pressing Up and
 Down buttons randomly for a few times. The history seems to be broken).

 In my homework I had to make a function zipN, which is actually zipWith
 but for more than two lists. The solution which dealt with stuck was to
 write my own transpose and apply {{{takeWhile (not . null)}}} to the
 remaining part of transposed matrix.

 P.S.:
 {{{#!hs
 [[0,0..],[1,1..]] == transpose (repeat [0..1])
 }}}
 also hangs ghci.

--

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


More information about the ghc-tickets mailing list