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