В настоящее время я получаю переход от объектно-ориентированного языка к функциональному языку. Это глоток свежего воздуха, и я нахожу себя намного более продуктивным, чем раньше.
Однако - есть один аспект ООП, который я еще не видел удовлетворительного ответа на стороне FP, и это полиморфизм. т.е. у меня есть большой набор элементов данных, которые нужно обрабатывать совершенно по-разному, когда они передаются в определенные функции. Для аргумента предположим, что существует множество факторов, ведущих к полиморфному поведению, поэтому потенциально экспоненциально много разных комбинаций поведения.
В ООП, который можно обрабатывать относительно хорошо, используя полиморфизм: либо путем наложения состава + наследования, либо с использованием прототипа.
В FP я немного застрял между:
- Написание или составление чистых функций, которые эффективно реализуют полиморфное поведение путем разветвления на значение каждого элемента данных, - скорее похоже на сбор огромного условного или даже симулирующего таблицы виртуальных методов!
- Помещение функций внутри чистых структур данных в стиле прототипа - похоже, что это работает, но разве это также не нарушает идею определения чистых функций отдельно от данных?
Каковы рекомендуемые функциональные подходы для такого рода ситуаций? Существуют ли другие хорошие альтернативы?