総当りというかバックトラックの例だが。

nQueen :: Int -> [[(Int,Int)]]
nQueen n = nQueen_ 1 [[]]
 where nQueen_ m ans
   | m > n = ans
   | otherwise = nQueen_ (m + 1) [(m, x) : xs |
                       xs <- ans,
                       x <- [1..n],
                       all (\ (i, j) -> x /= j && abs (m - i) /= abs (x - j)) xs]