Я изучаю haskell и пытаюсь реализовать функцию tails. Это моя реализация:Реализация функции хвостов в haskell
tails' :: [a] -> [[a]]
tails' [] = []
tails' (x:xs) = xs:[[tails' xs]]
Но я продолжаю нарваться ошибки компиляции
Couldn't match expected type ‘a’ with actual type ‘[[a]]’
‘a’ is a rigid type variable bound by
the type signature for tails' :: [a] -> [[a]] at..
Что не так с моей реализации?
Подпись вашего типа '' tails 'xs' должна быть уже списком списков. Закрывая его в скобках как '[[tails 'xs]]' обертывает этот список списков в двух дополнительных списках Singleton. Все, что вам нужно, это 'tails '(x: xs) = xs: tails' xs'. – Alec
@Alec: Вы правы. Оно работает. Но я до сих пор не понимаю, почему скобки должны быть удалены (кроме того, что он заставляет программу работать :)). Разве это не задача программиста обеспечить, чтобы возвращаемое значение соответствовало таковому в сигнатуре типа? Поскольку способ, которым вы помещаете: подпись типа, заботится о преобразовании его в список списков. – Ashwin