matches s = hasDoubles && hasRun && notBad
  where hasDoubles = length (filter (`isInfixOf` s) doubles) >= 2
        hasRun = any (`isInfixOf` s) runs
        notBad = not $ any (`isInfixOf` s) noneof

-- Again, I actually just ran this in ghci. Outputs both of the answers.
matches s = hasDoubles && hasRun && notBad
  where hasDoubles = length (filter (`isInfixOf` s) doubles) >= 2
        hasRun = any (`isInfixOf` s) runs
        notBad = not $ any (`isInfixOf` s) noneof

-- Again, I actually just ran this in ghci. Outputs both of the answers.
matches s = hasDoubles && hasRun && notBad
  where hasDoubles = length (filter (`isInfixOf` s) doubles) >= 2
        hasRun = any (`isInfixOf` s) runs
        notBad = not $ any (`isInfixOf` s) noneof

-- Again, I actually just ran this in ghci. Outputs both of the answers.