
The syntax [a, b..c] in general produces a list which starts with “a", followed by “b", going up until reaching (possibly including) c in step sizes of (b - a). (For simplicity’s sake, I only described non-decreasing lists) So it is logical that a step size of 0 produces an infinite list, when [1,1..1] is given. Notice that [1,1..1] is not the same as [1..], but "repeat 1”. Csongor
On 17 Mar 2016, at 02:58, Krisztian Pinter
wrote: Hello,
I noticed some odd behaviour with list comprehensions.
[1..1] == [1] BUT [1,1..1] == [1..]
I noticed this while writing a Clean program, but it seems Haskell inherited this as well. In the case of integer lists with step size >= 0 the up_list function[1] is used:
up_list :: Integer -> Integer -> Integer -> [Integer] up_list x0 delta lim = go (x0 :: Integer) where go x | x > lim = [] | otherwise = x : go (x+delta)
In the case of [1,1..1] x0 == lim, so go will recurse infinitely, producing an infinite list.
I think the reasonable behaviour would be [1,1..1] == [1]. Is there a reason it doesn't work like this?
[1] http://hackage.haskell.org/package/base-4.8.2.0/docs/src/GHC.Enum.html#up_li... http://hackage.haskell.org/package/base-4.8.2.0/docs/src/GHC.Enum.html#up_li...
Thanks, Krisztián _______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe