fact :: Integer -> Integer fact n = if n==0 then 1 else n*fact(n-1) sieve (p:ps) = filter (\ n -> n `mod` p /= 0) ps primes = map head (iterate sieve [2..]) safe p n = all not [ check (i, j) (1+length p, n) | (i, j) <- zip [1..] p ] check (i,j) (m,n) = j==n || (i+j==m+n) || (i-j==m-n) queens 0 = [[]] queens m = [ p ++ [n] | p<-queens (m-1), n<-[1..8], safe p n ] main = print (take 100 primes)