F # на самом деле имеет несколько очень хороших конструкций для создания управляемых событиями приложений пользовательского интерфейса, таких как События первого класса , Выражения объектов , вызывающие установщики свойств из конструктора, например:
new Form(Text="My Window Title", Width=600, Height=400)
и многое другое.
Однако для создания дизайнера форм *1013* в VS требуется CodeDom для вашего языка. Текущая архитектура CodeDom прекрасно работает, если ваш язык выглядит точно как C # или VB; он не подходит для генерации кода F # (это из веб-трансляции или интервью, которое я не могу найти прямо сейчас). Это также требует частичных классов, которые, если я правильно помню, не поддерживаются в языке начиная с бета-версии 1. Вместо того, чтобы сосредоточиться на поддержке дизайнеров в первом выпуске, команда F # решила потратить свои ресурсы на улучшение других частей языка, такие как асинхронное и параллельное программирование и т. д.
Это означает, что у вас есть как минимум 4 варианта создания пользовательского интерфейса в F #:
- Напишите весь код пользовательского интерфейса вручную, что хорошо для простых приложений;
- Создайте свой код F # в виде библиотеки для обработки «твердых частей», таких как асинхронный и параллельный код, или код, ориентированный на вычисления, и вызывайте его из C # / VB;
- Создайте свой код пользовательского интерфейса в виде библиотеки C # / VB, и оба изгоняют его из F # и делегируют обработку событий F #; или
- Используйте DSL или Вычислительное выражение (монада) , чтобы упростить построение пользовательского интерфейса вручную (только что обнаружил это при поиске других ссылок в этом ответе).
Из них вызов библиотеки пользовательского интерфейса C # из F # может быть наиболее гибким, сохраняя при этом привычную парадигму. Но использование выражений вычислений для быстрого создания пользовательского интерфейса, безусловно, стоит посмотреть.