pruneRow :: Row Choices -> Row Choices
pruneRow row = map (remove fixed) row
  where fixed = [d | [d] <- row]
        remove xs ds = if singleton ds then ds else ds \\ xs
        singleton ds = length ds == 1
pruneRow :: Row Choices -> Row Choices
pruneRow row = map (remove fixed) row
  where fixed = [d | [d] <- row]
        remove xs ds = if singleton ds then ds else ds \\ xs
        singleton ds = length ds == 1
pruneRow row = map (remove fixed) row
  where fixed = [d | [d] <- row]
        remove xs ds = if singleton ds then ds else ds \\ xs
        singleton ds = length ds == 1