adjacency :: (Int8, Int8) -> [(Int8, Int8)] adjacency (x, y) = reverse $ do xo <- [-1, 1] yo <- [-1, 1] (xm, ym) <- [(1, 2), (2, 1)] let rx = x + xo * xm let ry = y + yo * ym guard $ all id [rx >= 0, ry >= 0, ry < 8, rx < 8] return (rx, ry)