Ответ 1
Прежде всего, почти любой используемый сегодня язык эквивалентен в выразительной силе, будь он императивным или функциональным, поэтому естественно думать, что все, что вы можете делать на функциональном языке, вы, вероятно, можете сделать в императивном, потому что это, вероятно, так.
Одна из очень приятных особенностей функциональных языков заключается в том, что их структура позволяет применять вывод типа Хиндли-Милнера. Это система типов, используемая в SML, OCaml и множество других функциональных языков. Это, по-видимому, приводит к снижению частоты ошибок и способно сэкономить вам много времени и сил, обнаружив ошибки перед ошибками компиляции.
Аргумент автоматической параллелизации немного переработан, особенно потому, что обещание просто не наступило. Я написал явно параллельный код в функциональных языках, и это лучше, ИМХО, чем делать что-то подобное на Java или тому подобное.
Анекдотически, по крайней мере, я бы не стал первым человеком, утверждающим, что изучение функционального языка делает вас лучшим императивным программистом! Этот дискомфорт, который вы ощущали в том, что ваш "императивный" процесс мышления прерывается при использовании OCaml, на самом деле является действительно хорошим процессом. Это заставляет вас подвергать сомнению предположения и мешает вам писать код определенным образом только потому, что вы всегда так делали.
Что касается использования в реальном мире, вы можете посмотреть на семинары Коммерческие пользователи функционального программирования. Существуют также очень большие проекты, написанные на различных функциональных языках, хотя большинство из них, вероятно, имеют ограниченный интерес за пределами довольно небольших общин. Обозначения теоремы Coq и Isabelle написаны соответственно в Ocaml и SML.
Все, что вы делаете, я бы упорствовать. Я долгое время стучал головой о МЛ, прежде чем что-то наконец щелкнуло. В эти дни я не уверен, что даже помню, как работают Java или C, потому что у меня не было необходимости в них в течение длительного времени... Я просто использую ML!