Я использовал функцию cycle в некоторых моих проектах, и сегодня я обнаружил, что это не полная функция, как показано в этом Пример GHCI:
λ> Data.List.cycle []
*** Exception: Prelude.cycle: empty list
Я знаю, что Haskells пытается использовать полные функции (кроме основных функций head и tail), и я не совсем уверен, почему cycle не является одним из них. По-моему, cycle пустого списка - это пустой список, и я не вижу проблем с этим. Почему cycle для пустых списков выдает ошибку?
ИЗМЕНИТЬ:
Основываясь на первых ответах, я думаю, что моя идея не совсем ясна: я не хочу, чтобы cycle [] был вычислением, которое никогда не заканчивается. Напротив, я думаю, что cycle [] должен быть следующим:
cycle :: [a] -> [a]
cycle [] = []
cycle xs = xs ++ cycle xs
[] - это cycle [], потому что все операции выполняют именно то, что я за исключением. Например, take 3 [] составляет [], и, таким образом, take 3 (cycle []) может быть []. Какая проблема с этим решением?
