Когда вы сопоставляете шаблон с конструктором :
, используйте (x:xs)
.[x:xs]
- это нечто иное.
Всегда строчные буквы первой буквы идентификаторов.Это правило синтаксиса в Haskell, а не просто соглашение.
filter
принимает в качестве параметра функцию типа (a -> Bool)
.Для него не требуется экземпляр Ord a
.
В понимании списка термин генератора x <- xs
должен идти слева от любых терминов, использующих x
(то есть p x
).
filter :: (a -> Bool) -> [a] -> [a]
filter p xs = [x | x <- xs, p x]
quickSort :: Ord a => [a] -> [a]
quickSort [] = []
quickSort (x:xs) = quickSort mini ++ [x] ++ quickSort maxi
where
mini = filter (< x) xs
maxi = filter (>= x) xs