queens 0 = [[]] queens (n+1) = [ q:b | b <- queens n; q <- [0..7]; safe q b ] safe q b = and [ not checks q b i | i <- [0..(b-1)] ] checks q b i = q=b!!i || abs(q - b!!i)=i+1