anton0xf
Java dev math fp tl:dr: Монада — это враппер с возможностью оперировать над завёрнутым значением. Если вы пишете на Java то уже наверняка знаете, что это. Никакой магии или скрытых смыслов.

Со мной щас случилось неожиданное. Т.к. я на Хаскелях и Скалах так никогда и не писал ничего длиннее пятка строк, то меня, как и большинство остальных людей несколько смущало понятие "монада". Хотя и знал уже, что по сути это всего лишь умное название для некоего враппера. Но всегда оставалось ощущение, что там есть какой-то более сложный нюанс, т.к. про всякие джавовые Optional и пр. обычно говорят "это близко, но не совсем оно", и добавляют с придыханием, что там есть ещё "монадические законы" и начинают разговор про Теорию Категорий, с которой у меня тоже как-то всё не складывается.
А тут на конфе в который раз зашла об этом речь, и я решил прикола для заглянуть в вику. Долистал до определения и всё понял!

java.util.Optional — это натурально монада. Как стримы и любой другой враппер, если к нему прицепить метод flatMap() с поведением, как у соответствующих методов Optional или Stream.

Раскрою на примере того самого Optional. Как пишут в вики монада `M` над типом `T` (пишут `M T`) — это тройка, состоящая из
1. конструктора типа (`M T`), т.е. например `Optional<T>`
2. конвертера `unit: T -> M T`. Напомню, что в стандартной математической нотации `f: X -> Y` — это функция из `X` в `Y`. Для моего примера это будет создание Optional из значения, т.е. в той же нотации: `Optional::<T>of : T -> Optional<T>`
3. и комбинатора `(>>=): (M T, T → M U) → M U`, т.е. функа, который употребляет монаду и другой функ, который из значения, в неё завернутого, делает другое значение, завёрнутое в эту же монаду, и применяет второе к содержимому первой. Т.е. в точности то, что делает Optional::flatMap, если понимать объект, у которого этот метод вызывается, как неявный первый аргумент. Точнее если у нас есть `x : Optional<T>` (переменная `x` типа `Optional<T>`), то `x::<U>flatMap : (T -> Optional<U>) -> Optional<U>` (или как пишут в javadoc: `Optional<U> flatMap​(Function<? super T,​? extends Optional<? extends U>> mapper)`), что отличается от сигнатуры в определении только тем, что `x` — это неявный параметр, поэтому его тип e у меня написан отдельно, но это исключительно синтаксическая особенность — в том же Python этот аргумент пишется в сигнатуре методов явно.

Ну а "законы" — это абсолютно тривиальные ожидаемые от врапера свойства:
+ `unit(x) >>= f <-> f(x)` — означает что flatMap() применяет свой аргумент с завёрнутому значению, а не делает что-то более хитрое: `Optional.of(x).flatMap(f) == f(x)`
+ `ma >>= unit <-> ma` — если есть переменная `x : Optional<T>`, то примерение `flatMap()` к `Optional::of` ничего не поменяет: `x.flatMap(Optional::of) == x`
+ `ma >>= λx → (f(x) >>= g) <-> (ma >>= f) >>= g` — некое правило ассоциативности применения `flatMap()`, т.е. если `x : Optional<T>`, и `f: T -> Optional<U>`, а `g: U -> Optional<V>`, то `x.flatMap(x -> f(x).flatMap(g)) == x.flatMap(f).flatMap(g)`
egplife
math X physics alphaconstant alphavariable [01:48:58] ‎🍀😇🍀🐝💞🧙🌈🐁💚Crypto Life Jewellery 💎 Layerlet ±∞* 💚‎: *can *soonoverbabaluma physics ‎[01:48:25] ‎🍀😇🍀🐝💞🧙🌈🐁💚Crypto Life Jewellery 💎 Layerlet ±∞ 💚‎: *чернобыль *чаэс *аэс *chainreaction *can

‎[01:46:33] ‎🍀😇🍀🐝💞🧙🌈🐁💚Crypto Life Jewellery 💎 Layerlet ±∞* 💚‎: *γ *xray *зонаотчуждения *чернобыль гамма лучик рентген youtube.com
‎[01:46:34] ‎Juick‎: New message posted.
#3001036 juick.com
‎[01:47:34] ‎🍀😇🍀🐝💞🧙🌈🐁💚Crypto Life Jewellery 💎 Layerlet ±∞* 💚‎: *uranchild *U *peoplex *peopleu *чернобыль

‎[01:46:33] ‎🍀😇🍀🐝💞🧙🌈🐁💚Crypto Life Jewellery 💎 Layerlet ±∞* 💚‎: *γ *xray *зонаотчуждения *чернобыль гамма лучик рентген youtube.com
‎[01:46:34] ‎Juick‎: New message posted.
#3001036 juick.com
‎[01:47:35] ‎Juick‎: New message posted.
#3001038 juick.com
‎[01:48:25] ‎Juick‎: New message posted.
#3001040 juick.com
‎[01:48:59] ‎Juick‎: New message posted.
#3001041 juick.com
‎[01:49:08] ‎🍀😇🍀🐝💞🧙🌈🐁💚Crypto Life Jewellery 💎 Layerlet ±∞* 💚‎: S *metaphysics ✓
‎[01:49:08] ‎Juick‎: Subscribed
‎[01:49:12] ‎🍀😇🍀🐝💞🧙🌈🐁💚Crypto Life Jewellery 💎 Layerlet ±∞* 💚‎: S *physics ✓
‎[01:49:13] ‎Juick‎: Subscribed
‎[01:49:15] ‎🍀😇🍀🐝💞🧙🌈🐁💚Crypto Life Jewellery 💎 Layerlet ±∞* 💚‎: S *can ✓
‎[01:49:15] ‎Juick‎: Subscribed
‎[01:49:21] ‎🍀😇🍀🐝💞🧙🌈🐁💚Crypto Life Jewellery 💎 Layerlet ±∞* 💚‎: S *soonoverbabaluma ✓
‎[01:49:21] ‎Juick‎: Subscribed
‎[01:49:32] ‎🍀😇🍀🐝💞🧙🌈🐁💚Crypto Life Jewellery 💎 Layerlet ±∞* 💚‎: S *uranchild ✓
‎[01:49:32] ‎Juick‎: Subscribed
‎[01:49:37] ‎🍀😇🍀🐝💞🧙🌈🐁💚Crypto Life Jewellery 💎 Layerlet ±∞* 💚‎: S *U ✓
‎[01:49:37] ‎Juick‎: Subscribed
‎[01:49:49] ‎🍀😇🍀🐝💞🧙🌈🐁💚Crypto Life Jewellery 💎 Layerlet ±∞* 💚‎: S *x ✓
‎[01:49:49] ‎Juick‎: Subscribed
‎[01:49:53] ‎🍀😇🍀🐝💞🧙🌈🐁💚Crypto Life Jewellery 💎 Layerlet ±∞* 💚‎: S *peopleU ✓
‎[01:49:54] ‎Juick‎: Subscribed
‎[01:49:58] ‎🍀😇🍀🐝💞🧙🌈🐁💚Crypto Life Jewellery 💎 Layerlet ±∞* 💚‎: S *peopleX ✓
‎[01:49:59] ‎Juick‎: Subscribed
‎[01:50:00] ‎🍀😇🍀🐝💞🧙🌈🐁💚Crypto Life Jewellery 💎 Layerlet ±∞* 💚‎: S *x ✓
‎[01:50:01] ‎Juick‎: Subscribed
egplife
математика math mathematics финтех fintech !!aq Elon_Musk, как ты щитаешь, не в напряг =))) вот такой вопросец --- мне быть пидаром хуесосом и брать чужие проекты или лохануться и выебать эту вселенную сразу в нестандартные бесконечности дыр, промажорировав все финансовые штуки в мире, чтобы эта Вселенная родила мне многа счастья сразу и потом?*** ***?

juick.com
‎🍀😇🍀🐝💞🧙🌈🐁💚Crypto Life Jewellery 💎 Layerlet ±∞* 💚‎:
juick.com
egplife
математика math mathematics финтех fintech !!aq Elon_Musk, как ты щитаешь, не в напряг =))) вот такой вопросец --- мне быть пидаром хуесосом и брать чужие проекты или лохануться и выебать эту вселенную сразу в нестандартные бесконечности дыр, промажорировав все финансовые штуки в мире?

#fintech #финтех #математика #math #mathematics
anton0xf
math Coq Читаю Coq'Art. Доказал только что очередной (достаточно очевидный) факт, и внезапно захотелось поделиться и успехом (это было не очень просто), и мыслями на тему. А за одно решил обновить бложек на blogger. А чтобы не править по 10 раз для разных мест то тут просто оставлю ссылку. Поэтому под кат — это сюда
Strephil
math сшп политзк Американское математическое общество (AMS) направило обращение помощнице госсекретаря США Лизе Питерсон, в котором попросило включить обсуждение дела математика Азата Мифтахова в программу встречи Джозефа Байдена и Владимира Путина.
Можно по-разному относиться к Байдену, но другого президента у нас нет. Байден, помоги русским!
grizzly-8
баш q math нутыпонел .
Ребёнок на контрольной ловко складывает и вычитает трёхзначные числа с результатом в пределах 300 без калькулятора и "столбика". Не ошибается! И тут замечаю у него на столе две обыкновенных линейки по 300 мм каждая. Ими и орудует.
lurker
math немного о статистике:
Dr. Walker was dropped from the witness list for "tactical reasons" after she submitted her report on the case.[154][155] In it, she opines that the statistic from Dershowitz that of the two million incidents of abuse per year, only 2,000 victims are actually murdered by their spouses as being misleading because Brown was already dead.[156][157] The relevant statistic was "of the murdered spouses who were also victims of abuse, what percentage of them were murdered by their current or ex-husband?" When she reported that number was 80.3%, they dropped her from the witness list.[158]