I feel sorry for posting mis-formatted code.
I re-post the question. 
--

Hi, all.

While I know that foldr can be used on infinite list to generate infinite list,
I'm having difficulty in understaind following code:

isPrime n = n > 1 &&  -- from haskell wiki
        foldr (\p r -> p*p > n || ((n `rem` p) /= 0 && r)) True primes
primes = 2 : filter isPrime [3,5..]

primes is a infinite list of prime numbers, and isPrime does foldr to get a boolean value.
What causes foldr to terminate folding? 

Any helps will be deeply appreciated.

Thank you.


2016-02-02 10:32 GMT+09:00 Chul-Woong Yang <cwyang@aranetworks.com>:
Hi, all.

While I know that foldr can be used on infinite list to generate infinite list,
I'm having difficulty in understaind following code:

isPrime n = n > 1 && -- from haskell wiki foldr (\p r -> p*p > n || ((n `rem` p) /= 0 && r)) True primes primes = 2 : filter isPrime [3,5..]

primes is a infinite list of prime numbers, and isPrime does foldr to get a boolean value.
What causes foldr to terminate folding? 

Any helps will be deeply appreciated.

Thank you.

Chul-Woong