Достижение полиморфизма в функциональном программировании

В настоящее время я наслаждаюсь переходом с объектно-ориентированного языка на функциональный. Это глоток свежего воздуха, и я чувствую себя гораздо более продуктивным, чем раньше.

Однако есть один аспект ООП, для которого я еще не нашел удовлетворительного ответа на стороне FP, и это полиморфизм . т.е. у меня есть большая коллекция элементов данных, которые необходимо обрабатывать совершенно разными способами при передаче в определенные функции. В качестве аргумента предположим, что существует множество факторов, управляющих полиморфным поведением, поэтому потенциально экспоненциально много различных комбинаций поведения.

В ООП с этим можно относительно хорошо справиться с помощью полиморфизма: либо через композицию + наследование, либо через подход, основанный на прототипах.

В FP я немного застрял между:

  • Написанием или компоновкой чистых функций, которые эффективно реализуют полиморфное поведение путем ветвления по значению каждого элемента данных - это скорее похоже на сборку огромного условного выражения или даже на имитацию таблицы виртуальных методов !
  • Помещение функций внутри чистых структур данных в стиле прототипа - похоже, что это работает, но не работает » Это также нарушает идею определения чистых функций отдельно от данных?

Какие функциональные подходы рекомендуются для такого рода ситуаций? Есть ли другие хорошие альтернативы?

49
задан mikera 11 February 2011 в 03:34
поделиться