Та проблема не в самих побочных эффектах, а в том, что программы пишутся в стиле бейсика -- строка за строкой сверху вниз идёт сразу же выполнение. Если бы программы на Окамле оформлялись как в Паскале/Си -- описания типов, переменных, функций, и выполнение главной функции где-то там в конце текста программы -- то этой проблемы не было бы, имхо.
Что-то неубедительно. 1. Для определения рекурсивных частей reordering делать совершенно незачем. А значит, побочные эффекты никак тут не мешают. 2. Generalization step после определения рекурсии - что это и зачем? Насколько я помню, Хиндли-Милнер и без этого вполне справляется, сразу давая самый общий тип (он начинает с общих, конкретизируя по мере появления ограничений).
Comments 32
"The OCaml compiler seems very limited: why do you have to indicate when a function is recursive, cannot the compiler infer it?"
Xavier paused for a second, and replied patiently with the following story:
"One day, a disciple of another sect came to Xavier Leroy and said mockingly..."
Reply
И расползаются эти and по всему коду.
Reply
Обычно с помощью and я соединяю пару-тройку мелких функций, когда лень думать, как сделать по-другому.
Reply
Reply
Если бы программы на Окамле оформлялись как в Паскале/Си -- описания типов, переменных, функций, и выполнение главной функции где-то там в конце текста программы -- то этой проблемы не было бы, имхо.
Reply
Reply
1. Для определения рекурсивных частей reordering делать совершенно незачем. А значит, побочные эффекты никак тут не мешают.
2. Generalization step после определения рекурсии - что это и зачем? Насколько я помню, Хиндли-Милнер и без этого вполне справляется, сразу давая самый общий тип (он начинает с общих, конкретизируя по мере появления ограничений).
Reply
Reply
Reply
Reply
Вместо let x = ... in ... писать flip ($) ... (\x -> ...) не эстетично.
Reply
Reply
Reply
Reply
Leave a comment