Может ли способность обнаруживать циклические списки в Haskell нарушать какие-либо свойства языка?
В Haskell некоторые списки являются циклическими:
ones = 1 : ones
Другие не являются:
nums = [1..]
И тогда есть такие вещи:
more_ones = f 1 where f x = x : f x
Это обозначает то же значение, что иones
и, конечно, это значение является повторяющейся последовательностью. Но сомнительно, представлено ли это в памяти как циклическая структура данных. (Реализация может сделать это, ноэтот ответ объясняет, что «это вряд ли произойдет на практике».)
Предположим, мы берем реализацию на Haskell и взламываем в нее встроенную функциюisCycle :: [a] -> Bool
который исследует структурупредставление в памяти аргумента. ВозвращаетсяTrue
если список является физически циклическим иFalse
если аргумент имеет конечную длину. В противном случае оно не прекратится. (Я представляю, как «взломать», потому что невозможно написать эту функцию на Хаскеле.)
Не нарушит ли существование этой функции какие-либо интересные свойства языка?