possibleSolns :: Index  -- ^ the current index
              -> Lotus  -- ^ the lotus puzzle
              -> Solns  -- ^ a list of possible solutions that can be at the current index
possibleSolns ind lts
    | ind > 48 = []
    | lts !! ind == 0 = [1..7] \\ arcRingIndices ind
    | otherwise = [lts !! ind]
    where arcRingIndices n = getValues lts (getArcRings n)

-- | Solves the lotus puzzle using recursion (i.e. brute force method).
-- For every nonzero position in the Lotus, the solver tries all the possible
-- values until the Lotus is complete. An unsolvable lotus puzzle will return
-- an empty list.
possibleSolns :: Index  -- ^ the current index
              -> Lotus  -- ^ the lotus puzzle
              -> Solns
possibleSolns ind lts
    | ind > 48 = []
    | lts !! ind == 0 = [1..7] \\ arcRingIndices ind
    | otherwise = [lts !! ind]
    where arcRingIndices n = getValues lts (getArcRings n)

-- | Solves the lotus puzzle using recursion (i.e. brute force method).
-- For every nonzero position in the Lotus, the solver tries all the possible
-- values until the Lotus is complete. An unsolvable lotus puzzle will return
-- an empty list.
possibleSolns ind lts
    | ind > 48 = []
    | lts !! ind == 0 = [1..7] \\ arcRingIndices ind
    | otherwise = [lts !! ind]
    where arcRingIndices n = getValues lts (getArcRings n)

-- | Solves the lotus puzzle using recursion (i.e. brute force method).
-- For every nonzero position in the Lotus, the solver tries all the possible
-- values until the Lotus is complete. An unsolvable lotus puzzle will return
-- an empty list.