Мне не ясно, что вам не нравится в F #. Хотя он поддерживает стиль функционального программирования, он также улучшает императивное программирование в .NET во многих отношениях. Я не могу вспомнить ни один код C #, который не может быть заменен функционально идентичным и намного более коротким кодом F # ( небезопасный код - единственное исключение, которое приходит на ум).
Даже изменяемый тип, представляющий, например, запись базы данных
class Employee {
public Employee(string firstName, string lastName, int age) {
this.FirstName = firstName;
this.LastName = lastName;
this.Age = age;
}
public string FirstName { get; set; }
public string LastName { get; set; }
public int Age { get; set; }
}
можно уменьшить до F #:
type Employee =
{ mutable FirstName : string
mutable LastName : string
mutable Age : int }
И это должна быть чашка чая C #.
Когда вы сталкиваетесь с отсутствием функции F #, это обычно говорит о том, что есть лучший способ. Самое время остановиться и проанализировать недостатки типичного императивного подхода.
Действительно, величайшая сила F # может заключаться в том, что это мультипарадигмальный язык. Вы можете использовать ОО для структурирования вашего проекта и функциональное программирование «в малом» для организации ваших модулей - ни один стиль не должен доминировать. Это просто увеличивает размер вашей панели инструментов.
Если есть определенные задачи / концепции, у которых возникают проблемы при переносе на F #, вы должны упомянуть их, чтобы другие могли предложить решения.