Просто случайное размышление, глядя на мои многочисленные звонки length
, мне приходит в голову, что компилятор может рассказать длину любого списка благодаря неизменяемости и ссылочной прозрачности (даже если новые списки concat
-ed из существующих известных списков/кодовые пути). Тогда он, скорее всего, заменит все length l
«звонки» с фактическим int на какой-то стадии при генерации низкоуровневого кода, не так ли?Являются ли «длинные» вызовы переписанными как постоянные ints GHC?
Удивление, действительно ли это происходит, или я что-то упустил в своей новизне о чистых функциональных языках/компиляторе.
Show/Сообщите нам подробнее о вашем коде. Постоянны ли списки? – ThreeFx
Просто осознание моего было таким глупым вопросом (время разрыва, я думаю), конечно, многие из моих списков - это строки, загруженные из IO и полностью динамические. Я должен предположить, что проект компилятора с 25-летним стажем будет содержать известные длины постоянных списков. – metaleap
Это не имеет никакого отношения к 25-летнему компилятору - это зависит от реализации используемой структуры данных. Списки не сохраняют информацию о длине, и поэтому у вас нет постоянной длины со списками. – ThreeFx