Нет, но он сортирует строки так, как и должен:чтобы отсортировать по числовому значению, вам нужно отсортировать действительные числа.
import Data.List
import Data.Function
sortNumeric = sortBy (compare `on` (read :: String -> Int))
sortNumeric ["1", "200", "234", "30"]
Но: почему ваш список, полный "цифр", содержит строки?Попробуйте вместо этого использовать правильный [Int]
.