4. előadás
divisors :: Integral a => a -> [a]
divisors n = [i | i <- [1..n], n `mod` i == 0]
isPrime :: Integral a => a -> Bool
isPrime n = divisors n == [1, n]
primes :: Integral a => Int -> [a]
primes i = take i [ i | i <- [2..], isPrime i ]
-- Két helyen használtuk az `i`-t, de a program mégis működött.
-- A belső `i` "felülírta" a külső LÁTHATÓSÁGÁT
-- felülárnyékolta, shadowing
-- Nem érdemes, nehezen olvasható
-- jobb: primes n = take n [ i | i <- [2..], isPrime i ]
Ad-hoc polimorfizmus: vannak megszorítások
Paramterikus polimorfizmus: nincs megszorítás