prime = [x| x<-[2,3..], null [y|y<-[2,3..floor $ sqrt(fromIntegral x)],mod x y ==0] ]

primes r [] = r 
primes r (p:ps) = if null [y|y<-r,mod p y == 0] 
    then p:(primes (p:r) ps) 
    else primes r ps

pr = 2:(ps [3,5..])

ps (x:xr) = x:(ps (filter rem xr))
    where rem y = (mod y x) /=0