Вопрос по контрольной
Дали контрольную по Haskell. Хаскел вижу первый раз в жизни. Две первые задачи сделал, застрял на списках. Помогите, пожалуйста:
Условие:
3. Решить следующие задачи:
а) инвертировать список на всех уровнях вложенности;
б) найти суммы всех подряд идущих пар чисел в списке;
в) определить длину списка;
г) найти сумму нечетных элементов списка.
Застрял на а).
Полистал литературу, нашел следующий код:
-----------------------------
append :: [a] -> [a] -> [a]
append [] l = l
append (h:t) l2 = h : (append t l2)
atom :: ListStr (a) -> Bool
atom a = True
atom _ = False
Reverse_all (L) = L when atom (L)
Reverse_all ([]) = []
Reverse_all (H:T) = Append (Reverse_all (T), Reverse_all (H)) otherwise
----------------------------
append вопросов не вызывает, функция atom, как я понял, определяет является ли текущий элемент списка единичным элементом или составным (тоже списком). Но этот код не компилируется - Hugs выдает ошибки: ему не нравится слово when и непонятно слово ListStr...
Подскажите, пожалуйста, как тут правильно написать ?