Вы находите все встречающиеся буквы от A до G в строке в чувствительном порядке. Как сказано в комментариях, вы упускаете другой случай. В другом случае следует просто возвращать переменную acc.
Но в вашей программе все еще есть ошибки. Функция chr принимает число и возвращает символ ascii. То, что вам нужно, это ord, которое принимает char и возвращает значение ascii.
Так что версия вашей программы будет
ola xs = foldl (\acc x -> if (ord x >= 65 && ord x <= 71 || ord x >= 97 && ord x <= 103) then acc ++ [x] else acc) [] xs
Тип данных Char уже принадлежит классу Ord, поэтому вы можете сравнить его. Нет необходимости использовать орд. С этим вы можете написать выше как
ola xs = foldl (\acc x -> if (x >= 'A' && x <= 'G' || x >= 'a' && x <= 'g') then acc ++ [x] else acc) [] xs
В списке есть специальная функция, известная как фильтр, которая отбирает из списка только необходимые элементы. Используя фильтр вышеупомянутая программа будет.
ola xs = filter (\x -> x >= 'A' && x <= 'G' || x >= 'a' && x <= 'g') xs
теперь аргумент может быть просто удален, и его можно просто записать как
ola = filter (\x -> x >= 'A' && x <= 'G' || x >= 'a' && x <= 'g')
Бонус: -
Но теперь, что если у вас есть какой-то случайный символ, который вы хотите проверить. Вы можете сначала создать строку для символов, которые вы хотите отфильтровать. Для приведенного выше примера этого будет достаточно.
strList=['A'..'G','a'..'g'];
Теперь отфильтруйте, используя elem. Элемент проверяет, присутствует ли данный элемент в строке.
ola xs = filter (\x -> elem x strList) xs
Бонус 2: -
Что делать, если вы хотите удалить аргументы хз. Для этого сначала вам нужно сначала перевернуть аргументы элемента, чтобы список был первым.
ola = filter ((flip elem) strList)