Это вопрос Haskell, но меня также интересуют ответы на другие языки. Есть ли способ автоматически преобразовать чисто функциональный код, написанный для обработки списков или неизменяемых массивов, без каких-либо деструктивных обновлений, в код, который для повышения эффективности использует изменяемые массивы?
В Haskell сгенерированный код будет запускаться либо в Монада ST
(в этом случае вся она будет обернута в runST
или runSTArray
) или в монаду IO
, я полагаю.
I ' m больше всего интересуют общие решения, которые работают для любого типа элемента.
Я думал, что видел это раньше, но не могу вспомнить где. Если его еще нет, мне было бы интересно его создать.