firstGroups :: [Set.Set String]
firstGroups = map snd $ nubBy (\x y -> (fst x) == (fst y)) allTuples
    where allTuples = map getPattern allChord

-- Compute the pattern to reduce the 1330 possible answers 
-- when deciding the first guess. As we known, there are 
-- 6 patterns at the first stage.
firstGroups :: [Set.Set String]
firstGroups = map snd $ nubBy (\x y -> (fst x) == (fst y)) allTuples
    where allTuples = map getPattern allChord

-- Compute the pattern to reduce the 1330 possible answers 
-- when deciding the first guess. As we known, there are 
-- 6 patterns at the first stage.
firstGroups = map snd $ nubBy (\x y -> (fst x) == (fst y)) allTuples
    where allTuples = map getPattern allChord

-- Compute the pattern to reduce the 1330 possible answers 
-- when deciding the first guess. As we known, there are 
-- 6 patterns at the first stage.