<div dir="ltr">Hello,<div><br></div><div>I noticed some odd behaviour with list comprehensions.</div><div><font face="monospace, monospace"><br></font></div><div><font face="monospace, monospace">[1..1] == [1]</font></div><div>BUT</div><div><font face="monospace, monospace">[1,1..1] == [1..]</font></div><div><br></div><div>I noticed this while writing a Clean program, but it seems Haskell inherited this as well.</div><div>In the case of integer lists with step size >= 0 the <font face="monospace, monospace">up_list</font> function[1] is used:<br></div><div><br></div><div><div><font face="monospace, monospace">up_list :: Integer -> Integer -> Integer -> [Integer]</font></div><div><font face="monospace, monospace">up_list x0 delta lim = go (x0 :: Integer)</font></div><div><font face="monospace, monospace">                    where</font></div><div><font face="monospace, monospace">                        go x | x > lim   = []</font></div><div><font face="monospace, monospace">                             | otherwise = x : go (x+delta)</font></div></div><div><br></div><div>In the case of [1,1..1] x0 == lim, so <font face="monospace, monospace">go</font> will recurse infinitely, producing an infinite list.</div><div><br></div><div>I think the reasonable behaviour would be <font face="monospace, monospace">[1,1..1] == [1]</font>. Is there a reason it doesn't work like this?</div><div><br></div><div>[1] <a href="http://hackage.haskell.org/package/base-4.8.2.0/docs/src/GHC.Enum.html#up_list" target="_blank">http://hackage.haskell.org/package/base-4.8.2.0/docs/src/GHC.Enum.html#up_list</a></div><div><br></div><div>Thanks,</div><div>Krisztián</div></div>