Чтобы завершить существующие ответы,
Первая проблема, которую нужно преодолеть, чтобы попытаться скомпилировать код, или, по крайней мере, понять сообщение об ошибке. Этот намек должен дать вам отличное руководство по проблеме, с которой вы столкнулись, и как ее изменить, чтобы иметь правильную версию (даже если вы не заполняете требования к функции высокого порядка, по крайней мере, у вас будет рабочий).
Для этого, давайте взглянем на тип подписи пункта шаблона, (руководитель: хвост),
Сначала для (:) функции, у нас есть,
(:) :: a -> [a] -> [a]
Тогда мы получаем следующий вид для головы и хвоста, (которые являются аргументом из (:)),
- головка типа Int.
- хвост типа [Int].
Опять же, давайте посмотрим на тип подписи (>)
(>) :: Ord a => a -> a -> Bool
Если опустить класс ограничения, чтобы сохранить его простым, мы имеем,
(>) :: a -> a -> Bool
Или в ваш код есть,
....
if (head > tail) ...
....
Что можно переписать, чтобы упростить римента, а
....
if ((>) head tail)) ...
....
Используя все предыдущие замечания, вы должны быть в состоянии перестроить тип предоставляемой функции (>) и понять проблему.
Тогда вы можете исправить свой код и сделать это работает.
После того, как вы смогли взглянуть на high order function, а затем сделайте это правильно.
Как общее замечание, Когда вы застряли в сложной проблеме, попробуйте разбить ее на меньшую, и для каждой суб-проблемы попробуйте применить следующий принцип приготовления.
Сделать это работает,
сделать это правильно,
сделать, если быстро.
http://ideone.com/3veT8I показывает, что 'else' оставлен слева от' if', но он работает нормально. –