> Давайте попробую объяснить, надеюсь будет полезно.Слушай, да, это как минимум интересно. По факту мне стало понятно вот что: если я мыслил обо flatten исключительно как о типе 'a list list -> 'a list, то ты мыслишь о нём, как о 'a t t -> 'a t для произвольного t. В этом контексте flatmap уже видится в другом свете. Но меня не покидает дежавю. Я постоянно пользовался тем же Option.bind, и он очень похож на flatmap, описанный тобой: 'a option -> ('a -> 'b option) -> 'b option. И по типу, и по смыслу. Похоже, что это другое название той же самой сущности, с которым я просто чаще сталкивался по жизни.
Но если ты правду говоришь, и flatmap действительно трактуется так широко, то мне всё же не понятно, почему оно называется flatmap. Ну как бы с 'a list всё понятно. Там мы реально строим отображение и сглаживаем его. В случае, если вместо list-а был бы какой-нибудь условный set -- тоже было бы понятно. Но в случаях с 'a option или ('e, 'a) result -- ну как это можно называть map-ом... Это уже аналог apply, а не map-а. В общем, мне сдаётся, что называть эту функцию банальным bind-ом разумнее, нежели flatmap-ом.
Насколько распространено использование flatmap-а в обозначенном тобой контексте? В смысле, когда flatmap и flatten суть синонимы bind и join. Я хотел бы увидеть, что flatmap действительно рассматривается так широко, как ты это сейчас описал. Может быть, у тебя найдётся ссылка на соответствущую литературу?
PS: Если моё недоверие тебя задевает, я конечно извиняюсь, но пойми меня и ты -- я сходу этого не нагуглил, плюс к тому мы на опеннете: тут чего только за истину в последней инстанции выдать ни пытаются. То, что ты пишешь, выглядит очень похоже на правду. Но мне нужен пруфлинк.