Здравствуйте, Разраб, Вы писали:
Р>Есть вот такой код.
Р>функция view каждый раз возвращает новый элемент управления, т.к. чистая.
Здесь нет связи, можно представить чистую функцию, которая бы каждый раз возвращала один и тот же элемент. И грязную, которая бы возвращала каждый раз новый.
Р>Получается ФП не работает с Winforms? Нужны элементы ООП, чтобы избежать дикого оверхеда?
Получается, что что бы что-то утверждать, нужно формализовать понятие "ФП" и "работает". Если говорить именно о чистом ФП, то увы, с WinForms его скрестить будет сложно. Однако, F# преподносится гибридным и ФП в его рамках не обязано быть чистым. Компилятор ведь не требует чистоты функций.
о модели и элементах управления. Если мы не хотим пересоздавать часть формы при каждом изменении модели, то следует научиться менять элементы управления в соответствии с измененной моделью. Можно отдать чистой функции получение букета новых свойств для элементов управления, но все равно кому-то надо будет отдать изменение элементов в соотвествии с новыми свойствами. В лучших традициях ФП сделать вид что изменение состояния где-то под капотом.
Собственно, вместо изменения состояния
form.Controls.Clear()
form.Controls.Add(newLayout)
вызвать что-то вроде грязной
updateLayout form newModel
Винформс не заведется без грязи. Собственно, стоит ли пытаться делать вид, что программа на ФП с Винформс вся чистая? Но даже если бы оно того и стоило, все равно пришлось бы написать грязный обновлятор Винформс, который бы подгибал элементы управления.