Я использовал функцию 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 [])
может быть []
. Какая проблема с этим решением?