> Я постоянно пользовался тем же Option.bind, и он очень
> похож на flatmap, описанный тобойДа, flatMap это и есть bind.
> Но если ты правду говоришь, и flatmap действительно трактуется так широко, то
> мне всё же не понятно, почему оно называется flatmap.
Даже с Option и Either flatMap можно разбить на map и flatten. Лучше конечно не надо, но можно.
То есть сначала map делает
Option[ A ] -> Option[ Option [ B ] ]
а потом flatten делает
Option[ Option[ B ] ] -> Option[ B ]
> В общем, мне сдаётся, что называть эту функцию банальным bind-ом разумнее, нежели flatmap-ом.
Может, разумнее а может и нет. Споры про именование - вообще неблагодарное занятие. По мне так слово bind может означать очень много чего, в том числе и то, что делает flatMap.
> Насколько распространено использование flatmap-а в обозначенном тобой контексте? В смысле,
> когда flatmap и flatten суть синонимы bind и join. Я хотел
> бы увидеть, что flatmap действительно рассматривается так широко, как ты это
> сейчас описал. Может быть, у тебя найдётся ссылка на соответствущую литературу?
Для Окамла твоего не знаю литературы. Для Скалы можешь попробовать "Functional Programming in Scala" или "Get Programming with Scala", вот статья по мотивам текста оттуда:
https://freecontent.manning.com/using-option-in-scala-part-2.../
Вот ещё про то же самое, очень коротко:
https://alvinalexander.com/scala/handling-nested-options-wit.../
Вот наоборот подлиннее, в том числе явно упоминается, что flatMap это bind:
https://medium.com/free-code-camp/demystifying-the-monad-in-...
Вот про Яву:
https://stackabuse.com/java-8-streams-definitive-guide-to-fl.../
Везде даются примеры с Option/Optional вместо Either, наверное для простоты понимания. Но я и Option/Optional, и Either совместно с flatMap видел в коде реальных проектов. Уж сам решай, верить или нет.