![[personal profile]](https://www.dreamwidth.org/img/silk/identity/user.png)
Мы привыкли, что правая свертка (foldr) хорошо заточена для работы с бесконечными списками:
> let mapPlusPi = foldr (\x xs -> (x+pi):xs) [] > head $ mapPlusPi [1..] 4.141592653589793К сожалению, иногда возникают неприятности. Вот функция, которая берет список и выкидывает из него элементы стоящие на нечетных местах:
> let evenOnly = snd . foldr (\x (os,es) -> (x:es,os)) ([],[]) > evenOnly [1..10] [2,4,6,8,10]Только вот на бесконечном списке она ведет себя неподобающе
> head $ evenOnly [1..] Interrupted.Почему это происходит, и какие минимальные изменения можно в нее внести, чтобы восстановить утраченную работоспособность?