doSolve ind (x:xs) lts
    | null solvedNext = doSolve ind xs lts
    | otherwise = solvedNext
    where recurseNext n s = doSolve (n + 1) (possibleSolns (n + 1) s) s
          solvedNext = recurseNext ind (returnBoard x ind lts)

-- | Higher order solve method to tie the rest together
doSolve ind (x:xs) lts
    | null solvedNext = doSolve ind xs lts
    | otherwise = solvedNext
    where recurseNext n s = doSolve (n + 1) (possibleSolns (n + 1) s) s
          solvedNext = recurseNext ind (returnBoard x ind lts)

-- | Higher order solve method to tie the rest together
doSolve ind (x:xs) lts
    | null solvedNext = doSolve ind xs lts
    | otherwise = solvedNext
    where recurseNext n s = doSolve (n + 1) (possibleSolns (n + 1) s) s
          solvedNext = recurseNext ind (returnBoard x ind lts)

-- | Higher order solve method to tie the rest together