Когда функция может быть обернута в тип данных? (Вопрос об утилите «apply», когда у вас уже есть «map») - PullRequest
0 голосов
/ 11 января 2020

Я понимаю, что когда вы работаете с аппликаторами, map берет F<A> и f: A->B и выдает F<B>. Или, другими словами, он разворачивает значение, применяет функцию и переупаковывает ее в том же контексте. В псевдокоде option(9).map{squareRoot} == option(3)

я также понимаю, что apply аналогично. Он берет F<A> и F<f: A->B> и производит F<B>. Другими словами, он разворачивает значение, разворачивает функцию, применяет функцию к значению, а затем повторно оборачивает результат этого.

map очевидно. Он повсеместно используется со списками / последовательностями на множестве языков.

Менее очевидным для меня является случай, когда вам когда-нибудь понадобится ap (который, как я видел, определен как композиция pure и map как есть). Да, если у вас есть функция, заключенная в тип данных, такой как Option, и значение, заключенное в тот же тип, вы, естественно, используете apply. Но когда бы вы когда-нибудь обернули такую ​​функцию?

Я могу думать только об одном сценарии использования как о новых ie более эзотерических c концепциях функционального программирования, и это когда у вас есть список значений и список функций, и вы хотите список значений с примененными функциями. Итак,

list(1,2,3).apply(list(square,cube)) == list(1,4,9,1,8,27) // or (1,1,4,8,1,27)...

Существуют ли полезные примеры этого с опцией, либо et, c., А не просто выдуманные примеры, чтобы показать, что apply делает?

Редактировать Единственный другой пример, который я могу вспомнить, это, например, вы извлекаете «правило» из базы данных, чтобы применить к некоторым данным, но это может не произойти. быть связанным правилом.

Итак, у вас есть 9, и вы извлекли "правило" из БД: option<rule>. Если правило является сериализованной функцией, вы можете выполнить some(9).apply(option<rule>), если, если нет правила (или нет значения, к которому следует применить правило), вы получите None, но если есть правило, вы получите результат в обертке в некоторых.

Но это кажется искусным, чтобы найти оправдание для использования apply. Встречаются ли такие вещи в развитии предприятия или академии c? Я не могу вспомнить.

Пример списка тоже кажется надуманным, так как обычно я думаю, что я хотел бы, чтобы результаты были сгруппированы как-то вроде списка 2х3, а не одномерной коллекции.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...