The Absolute Best Intro to Monads For Software Engineers

If you had to pick the most inaccessible terms in all of software engineering, monad would be a strong contender for first place, because of its spooky math background that uses terms like endofunctor and monoid. As it turns out, monads are an extremely powerful design pattern that can be used without any math knowledge. In this video, we’ll cover what monads are, how they can be incredibly useful, and examine some common monads. All you need is a little software engineering knowledge. Let's go!
Dr. Strange Icon Credit: dribbble.com/dalius-stuoka
00:00 Intro
00:29 Basic Code
01:45 Issue #1
02:38 Issue #2
04:11 Putting It All Together
05:15 Properties of Monads
06:05 The Option Monad
09:14 Monads Hide Work Behind The Scenes
11:21 Common Monads
12:10 The List Monad
13:56 Recap

Пікірлер: 772

  • @asadsalehumar1011
    @asadsalehumar10112 жыл бұрын

    Hands down the most awesome explanation of Monads on KZread

  • @neogen23

    @neogen23

    Жыл бұрын

    My experience as well, though I realise as much having already understood the concept via classic methods (see a book on Haskell), so I was like "Yep, that's totally it". I doubt it would have helped me if I had used it as tutorial material. Still, a stellar explanation

  • @AutoFirePad

    @AutoFirePad

    Жыл бұрын

    It turns out that we have been using monads without even knowing it for years.XD

  • @erikkostic8271

    @erikkostic8271

    Жыл бұрын

    Feel you

  • @stopper0203

    @stopper0203

    Жыл бұрын

    Agree

  • @quantisedspace7047

    @quantisedspace7047

    10 ай бұрын

    Maybe it was. I gave up when I heard the stupid music.

  • @jcolt452
    @jcolt4522 жыл бұрын

    How on earth did you break the curse!? .... "Once you understand Monads you lose the ability to explain them"! 🤣

  • @aiocafea

    @aiocafea

    2 жыл бұрын

    you have to trick a veteran functional programmer into helping you if you start explaining monads to enough people that already understand them, eventually one will tell you 'oh you don't _actually really_ understand monads unless you understand…' and suddenly you will feel this clearness in your brain you can suddenly explain this concept and all of the useful ramifications

  • @Bergerons_Review

    @Bergerons_Review

    Жыл бұрын

    I think that's true for most coding problems ;)

  • @GesteromTV

    @GesteromTV

    9 ай бұрын

    This is greate video that explain how to use monads and how fo recognize them, but in true math style there is whole universe that you skiped.

  • @ArturCzajka

    @ArturCzajka

    9 ай бұрын

    @@GesteromTVAnd that's how he shoved it into a 15-minute video, and not a 60-minute lecture 😝

  • @Lee-qj4hk

    @Lee-qj4hk

    9 ай бұрын

    Monads are a brain virus which makes you believe in Monads

  • @gargshishir3
    @gargshishir3 Жыл бұрын

    After maybe 10 years of periodically going back to the definition of monads, googling and still not understanding what the hell they are, you have done it! Thank you, one less mystery in life.

  • @KingTheRat

    @KingTheRat

    9 ай бұрын

    I watched this video last year, and this year, I already do not remember what it is. Time to watch this video again. :)

  • @gargshishir3

    @gargshishir3

    9 ай бұрын

    @@KingTheRat I did that recently too 😆

  • @RickGladwin

    @RickGladwin

    21 күн бұрын

    Yeah I saw the thumbnail on my feed and was like “ah, it’s that time of year again - time to learn what a monad is” 😅

  • @nobodyinparticular8219
    @nobodyinparticular82192 жыл бұрын

    Very good explanation, finally someone who's using a programming language which people who don't yet know what monads are can actually understand. Another good video on the subject is Brian Beckman's "Don't fear the Monad" which explains it in a more abstract way, but still using familiar terms. Other videos, and especially Computerphile's video were completely inaccessible to me and left me thinking that I'd need to spend months studying category theory or at least read a book on Haskell before I could understand this concept. You and Brian made me realize that I had actually invented monads on my own and have been using them without knowing what they are.

  • @evanroderick91

    @evanroderick91

    Жыл бұрын

    I'm not familiar with this programming language. What language is this?

  • @rakandhiyaaa92

    @rakandhiyaaa92

    Жыл бұрын

    @@evanroderick91 I think this is typescript

  • @younes3573

    @younes3573

    Жыл бұрын

    @@evanroderick91 as mentioned before it is TypeScript: JavaScript but with types

  • @denisg1208

    @denisg1208

    Жыл бұрын

    I agree with you about video ‚Dont fear the monad’. Also explains it really well

  • @MrRedstonefreedom

    @MrRedstonefreedom

    Жыл бұрын

    It's funny you mentioned the computerphile video because I likewise, even in using monads wherever applicable, watched that video and felt like I understood it even less. Even funnier still is the disclaimer he gave of "well people criticize mathematicians for not being able to explain their concepts in relatable terms, but I think they should just get over it". And it's like... they will get over it, by just ignoring their work & having to rediscover it anyways in their own contexts.

  • @scheimong
    @scheimong Жыл бұрын

    That was fun to watch. I've been writing rust for a good while now, so basically I've been using monads everyday all this time without knowing the concept's technical name. Watching you refactor bad typescript step by step into rust felt funny.

  • @ChrisD__

    @ChrisD__

    Жыл бұрын

    And this explains why don't understand Rust... I didn't understand monads!

  • @dcuccia
    @dcuccia8 ай бұрын

    I mean, "Its just a monoid in the category of endofunctors. What's the problem?" Scott Wlaschin also does a great job of explaining monads graphically with his "Railway Oriented Programming" talks. But this was a great "part to whole" way to take a single use case and expand the concepts, step by step. Nicely done!

  • @connorkapooh2002
    @connorkapooh2002 Жыл бұрын

    Dude. This was fucking sick, please keep producing videos like this. I think there's also a lack of beautiful visualisations for more advanced concepts (which makes sense because more people are going to be beginners). Keep it up man, your animations are absolutely gorgeous :)

  • @JoshuaKisb
    @JoshuaKisb2 жыл бұрын

    first video that actually explains monads in sensible approachable way. thank u very much

  • @youngcitybandit
    @youngcitybandit9 ай бұрын

    This seems like a very intuitive pattern but at the same time I never knew this could be so formalized. Thank you I learned a lot

  • @chachan4142
    @chachan41422 жыл бұрын

    Thank you. this video is very practical, informative, and truly demonstrates what can be achieved with monad with actual example and not just the abstract concepts of it all. Best one yet that I've seen on KZread. You've earned a new. subscriber!

  • @papetoast
    @papetoast Жыл бұрын

    As someone who didn't know monads, this is an excellent video! You started with an iterative approach on simple examples to give an intuition of why the idea of monads is useful. Then after having the intuition you give a more abstract, rigorous definition, along with real usages. I think I wouldnt have been able to understand the abstraction as easily if there wasnt the simple examples in the beginning. Then you give a summary to help remember the content of this video. Overall I think the flow is great and the pace is just right. Sometimes I have to pause a bit to understand the code but I never have to think really hard to understand since the leaps in logic are always small enough. Thank you for making this video!

  • @CFEF44AB1399978B0011
    @CFEF44AB1399978B00119 ай бұрын

    I'm blind and you were able to describe your content without using this and that while pointing at places in the code. nice work.

  • @steveloco1170

    @steveloco1170

    9 ай бұрын

    bro WDYM YOU ARE BLIND AND WATCHING KZread

  • @CFEF44AB1399978B0011

    @CFEF44AB1399978B0011

    9 ай бұрын

    @@steveloco1170 you do realize blind people live normal lives?

  • @jhoughjr1

    @jhoughjr1

    9 ай бұрын

    @@steveloco1170 main thing to know is "blind" is shorthand for visually impaired. Also you can learn from hearing too.

  • @NOT_A_ROBOT

    @NOT_A_ROBOT

    10 күн бұрын

    ​@@steveloco1170 not all blind people are completely blind. some at least have partial vision

  • @arongil
    @arongil2 жыл бұрын

    +1, this video taught me exactly what monads are from a practical standpoint. Thank you!

  • @julestburt
    @julestburt Жыл бұрын

    I founded Vancouver's Functional Meetup which ran for 3 years...and we discussed monads a lot!! I had a lot of ongoing questions. I saw many presentations, yet I was always left wondering / wishing someone could actually show me a 'monad' rather than discussing the apparent philosophy or upper purpose! Finally, someone explained it with great code examples, which I could easily relate to Swift (my language) and completely and finally understand monads...I had assumed one didn't really need to know 'monads' to use them, and it turns out with arrays, maps/flatmaps, optionals, and even a plug in Then promise library - all these were monads of course and I didn't need to know one to use one...but your explanation nails it! Many thanks!!

  • @MrRedstonefreedom
    @MrRedstonefreedom Жыл бұрын

    Jesus, this is such a robust explanation. This could be watched every 3 months just to reconsider newly-encountered applicability. I already came to the same conclusions about monads in programming (as a design pattern, in any kind of paradigm or language), and done a lot of deep thinking, but even still, this is such a wildly useful video as a consolidation tool. You've given a lot of excellent visualizations that make aspects-management & its expression a lot easier.

  • @GVSM-xo9ri
    @GVSM-xo9ri Жыл бұрын

    By far the most amazing explanation i've ever read. Nice examples, made the concept a lot easier to understand!

  • @brettm4179
    @brettm41792 жыл бұрын

    I loved this video. Would love to see some explanations on applicatives and functors as well and some fp-ts examples. The pipe and flow makes using monads and functors so nice

  • @ShykinArcana
    @ShykinArcana Жыл бұрын

    I've been doing this for years and just calling it good encapsulation and treating functions as a blackbox. Reduce how much the caller needs to know about the function and allow it to be a blackbox. Or rather I suppose, how to create the blackbox in the first place. Good to know the new vocab for it and this is a really good explanation, much better than I could give to new devs. I'd frankly send them to this video to learn the concept.

  • @denisg1208

    @denisg1208

    Жыл бұрын

    The way I understood it, monads require a logging of sorts no? Or was that just one use case for monad patterns

  • @denisg1208

    @denisg1208

    Жыл бұрын

    Nevermind it was just an example.

  • @user-tx4wj7qk4t

    @user-tx4wj7qk4t

    3 ай бұрын

    You've got no idea what you're saying and just saying things lol

  • @MadaxeMunkeee
    @MadaxeMunkeee Жыл бұрын

    This video is a true triumph. Thanks so much for making it!

  • @blakedowling7002
    @blakedowling70028 ай бұрын

    Amazing work here. Turns out I've been partially harnessing the power of monads the whole time, but understanding how you can simply chain passed functions brings my software engineering understanding to a new level. Thanks for your effort in making this video Alex.

  • @ZackFreedman
    @ZackFreedman Жыл бұрын

    Great explanation. I'm going to use this as a benchmark when I do actual education videos.

  • @crckrbrrs

    @crckrbrrs

    9 ай бұрын

    yeah, now that i think about it the oscilloscope video was quite similar to this one

  • @JamesWalker-rs1ps
    @JamesWalker-rs1ps Жыл бұрын

    Hey, this is great! You've got a good way of explaining things using plain English and building concepts from a basic level.

  • @vikingthedude
    @vikingthedude2 жыл бұрын

    This is some good stuff. I'm also glad to see you have other videos. Hoping you get more subscribers, you deserve it

  • @therealguanzo
    @therealguanzo Жыл бұрын

    One of the best videos on programming I've ever seen. Subscribed. Please make more!

  • @atrowell
    @atrowell Жыл бұрын

    Impressive explanation. Quickly provided useful information that gives me better understanding of techniques I already use as well as new ones to adopt.

  • @Masto12321
    @Masto12321 Жыл бұрын

    You won yourself a subscriber with this clean clean video. Can't wait to go through more of your content!

  • @sct848
    @sct848 Жыл бұрын

    Please keep coming up with great content like this, thank you!

  • @prince_of_devils
    @prince_of_devils2 жыл бұрын

    Definitely lives up to the title, thank you for making such a great explanation.

  • @ocnah
    @ocnah Жыл бұрын

    Absolutely greatly presented and explained, well done.

  • @sgwong513
    @sgwong5132 жыл бұрын

    wow, first time I know monad so clearly. thanks and looking for future video like this. really good video.

  • @erikgrundy
    @erikgrundy Жыл бұрын

    I've always thought that the definitions people used are always more complex than they need to be. I'm glad you've managed to explain it in a way that feels like something a programmer would do

  • @user-tx4wj7qk4t

    @user-tx4wj7qk4t

    3 ай бұрын

    By programmer you mean code 🐒

  • @erikgrundy

    @erikgrundy

    3 ай бұрын

    @@user-tx4wj7qk4t i don't, and i'm a little confused at what you're implying. do you mean that no "real" programmer requires it to be explained like this? or that you don't think the code in the video is very good? please, enlighten me

  • @user-tx4wj7qk4t

    @user-tx4wj7qk4t

    3 ай бұрын

    @@erikgrundy a software engineer is supposed to be an engineer. An engineer uses math and science to solve real life problems. However "software engineers" are the only kind of engineers who hate math and science and think even simple basic math is "too complex" and are always looking for immediate answers on "how" to use something, with very little understanding of "what" something is or "why" it is. The explanation above is terrible for very many reasons but mainly because he doesn't actually explain anything any what a monad actually is, it's just overly convoluted examples of what you can do with it which ironically is more complex than if somebody just explained what it is. You saying "feels like something a programmer would do" means code monkey because actual software engineers understand math and don't explain things this way

  • @mikec518

    @mikec518

    Ай бұрын

    ​@@user-tx4wj7qk4tpretty elitist take in my opinion. I think the video does a great job at highlighting the use and benefits of monads from a practical perspective. Many people, engineers and otherwise, benefit from illustrative examples as points to jump off of and then abstract. You are free to complain about what you think engineers should and shouldn't do until the cows come home, I'm sure that's much more useful. Or, if you're so concerned about software pedagogy, why not put your money where your mouth is and make a guide yourself? But I understand, hiding behind cheap talk is much easier. These lazy software engineers, right?

  • @bigpest

    @bigpest

    Ай бұрын

    ⁠​⁠@@user-tx4wj7qk4t in the same breath, “engineers solve real life problems” and “they only care about *how* to use tools” Using tools is what solves problems. It makes sense that engineers prioritise practical use over formal understanding. Save the high-level math for academia and research.

  • @wcarmon1209
    @wcarmon1209 Жыл бұрын

    You have quite a gift for education. Thanks for taking time to explain this.

  • @hansschenker
    @hansschenker2 жыл бұрын

    Practical samples and very good explanations! Thank's for publishing!

  • @rajthewise
    @rajthewise Жыл бұрын

    This is the first video that 'shows' the thing by including 'how to' aspect. Best video I came across so far.

  • @karavind7814
    @karavind7814 Жыл бұрын

    This is the best video explaining monads, thank you for the great yet simple explanation 😊

  • @eliote.corleyii5792
    @eliote.corleyii5792 Жыл бұрын

    I only wish I could like the video as many times as I have watched it. What an incredible presentation and a simple explanation of such a feared topic. Thank you.

  • @TheJonBrant
    @TheJonBrant Жыл бұрын

    Incredible video. I felt a lot of clicks, and feel like I may have understood monads better than I thought. Thank you!

  • @aryanrahman3212
    @aryanrahman32122 жыл бұрын

    Thank you so much for such a simple but relevant explanation!

  • @brettwines6812
    @brettwines68122 жыл бұрын

    can confirm, is the best introduction!! Honestly so so good

  • @tqian86
    @tqian86 Жыл бұрын

    This is an amazing intro in the sense that the title isn't even a clickbait! ;) Thanks for the video!

  • @yeong126
    @yeong126 Жыл бұрын

    Among all the functional programming videos in my feed this is the first one I understand something. Great video!

  • @atanugayen3030
    @atanugayen30308 ай бұрын

    I kept seeing this video recommended to me, but I avoided it everytime thinking "this is gonna be too complicated, I'll watch it later when I have the time/energy." Glad I finally bit the bullet and watched it... was not disappointed. Fantastic explanation... please keep making videos like this!

  • @CartoType
    @CartoType Жыл бұрын

    Very interesting and new to me. One small thing; what you call a caret, , is more properly known as an angle bracket when it is used as a delimiter. This is a caret: ^.

  • @NicholasShanks

    @NicholasShanks

    Жыл бұрын

    Yes, worst part(s) of the video, that.

  • @jasonzuvela

    @jasonzuvela

    Жыл бұрын

    Exactly! So painful to hear every time. en.m.wikipedia.org/wiki/List_of_typographical_symbols_and_punctuation_marks

  • @31redorange08

    @31redorange08

    Жыл бұрын

    That's a circumflex.

  • @abdulhamidalsalman
    @abdulhamidalsalman2 жыл бұрын

    Alex you are the champion of the web. You deserve a noble prize for making these great videos.

  • @mabuelhagag
    @mabuelhagag11 ай бұрын

    I recently discovered Effect-ts and was struggling to understand the basic concepts of it. The docs don't mention mondas while explaining how the library works (due to a valid reason. Mentioning monads scares people!) But this video explains it beautifully! Thank you man! You got yourself a subscriber 😊

  • @d0m186
    @d0m186Ай бұрын

    Best video i have seen on this topic. Most videos start with explaining monads, monoids, and endofunctors and are completely overcomplicated. Starting with an easy to grasp example is way better

  • @kellybmackenzie
    @kellybmackenzie Жыл бұрын

    4:43 Thank you SO MUCH, seriously! When you said that it instantly clicked. This genuinely helped me so much, thank you!

  • @Daspem25
    @Daspem25 Жыл бұрын

    Dude your channel is a gold mine!!

  • @tylerholden1548
    @tylerholden154827 күн бұрын

    I think maybe in more professional and critical software this could be important, but as a game dev I watch this and think "wow this is very overcomplicated"

  • @user-uf4lf2bp8t

    @user-uf4lf2bp8t

    21 күн бұрын

    Don't worry, the library code that you use takes care of this so you don't have to.

  • @sheepcommander_

    @sheepcommander_

    17 күн бұрын

    ` Vector2?`

  • @ohm62
    @ohm624 ай бұрын

    Stellar presentation of monads! Thank you so much!

  • @grkuntzmd
    @grkuntzmd Жыл бұрын

    Best explanation of monads that I have seen. Bravo!

  • @Daniel_WR_Hart
    @Daniel_WR_Hart Жыл бұрын

    I watched a bunch of talks about what monads were, but this was the first to make me realize that I actually wrote one unintentionally last year while trying to learn about design patterns

  • @jamesmstern
    @jamesmstern9 ай бұрын

    This is a marvel of clarity.

  • @Sahuagin
    @Sahuagin9 ай бұрын

    this is the best explanation of monads I've ever seen, thanks

  • @darkarie
    @darkarie Жыл бұрын

    really well explained. I subscribed in the middle of the video, keep it up!

  • @dawid_dahl
    @dawid_dahl Жыл бұрын

    One thing I’ve noticed that is tricky is when you have a value wrapped in several monads. For example, if you have a value that is asynchronous and also can fail with an error. Then you have a value wrapped in a Future/Promise/Task as well as an Either. Would love a video about how to deal with this complexity. How to traverse between different monad lands.

  • @Holobrine

    @Holobrine

    9 ай бұрын

    You’d probably pass one “runWithLogs()” into another, nesting the functions in the same way the types are nested

  • @ivanjermakov

    @ivanjermakov

    9 ай бұрын

    Yep, because Promise.then() has the same type signature and meaning as flatMap (or bind in monad). It transforms promise, using a function transforming wrapped value into a new promise.

  • @HolyAvgr

    @HolyAvgr

    9 ай бұрын

    ​@@ivanjermakov wouldn't this be trivially solved by back-tracking the function through the unwrap, since both monads are Generic in their implementation? If you have a Future, what you probably have is something in the form of future(optional(5)), which can also be expressed as a chain operation as: let result: Promise = createOptional(5) | .createFuture($0) in which case you should probably be able to do something like `result.value.value` which should resolve without much problem: Unfulfilled promise would nil .none in the optional would also nil

  • @ArturCzajka

    @ArturCzajka

    9 ай бұрын

    Keywords are: monad transformers (more popular, safer to start with this) and extensible-effects (imho cooler) 😄

  • @jn-iy3pz
    @jn-iy3pz2 жыл бұрын

    I watched a few videos but this is the one that made sense to me. Thank you!

  • @avi3681
    @avi3681 Жыл бұрын

    Great to see the clear examples in TypeScript!

  • @Aucacoyan
    @Aucacoyan10 ай бұрын

    This is actually great teaching material, thank you so much!

  • @Seyunx
    @Seyunx Жыл бұрын

    Topo keep up the amazing work, you deserve more views!

  • @ryannygard3661
    @ryannygard36619 ай бұрын

    I just made a monad this week without even realizing it, but I never thought about implement logging into it. I'll need to do that immediately because that would be extremely useful!

  • @Radioguy00
    @Radioguy00 Жыл бұрын

    Excellent delivery of information

  • @n4vyblueyes377
    @n4vyblueyes377 Жыл бұрын

    Thanks for putting this together. Obviously took some time and it is a dry topic. Much appreciated. 👍

  • @kingshukmajumder2087
    @kingshukmajumder2087 Жыл бұрын

    One of the best descriptions of monad!

  • @atalhlla
    @atalhlla Жыл бұрын

    You got me, I was about to freak out about you not mentioning Lists/Arrays. Very good explanation and examples!

  • @_blank_3677
    @_blank_3677 Жыл бұрын

    Dude… years… years I tell you!!!! Why does everyone else suck sooooo bad at explaining this! Finally! I feel complete. Ty

  • @romanmahotskyi6898
    @romanmahotskyi68982 жыл бұрын

    This is one of the best explanations I've ever seen. Thanks a lot

  • @Irokesengranate
    @Irokesengranate Жыл бұрын

    This was extremely helpful, thank you!

  • @ya3rub101
    @ya3rub1012 ай бұрын

    best monads explanation i've ever seen !, thank you !!!

  • @SteveDellaValentina
    @SteveDellaValentina Жыл бұрын

    I'm not sure how I stumbled on to here but I'm glad I did. This is not only helpful as a software engineer, but a really good example of how to teach an abstract concept in a very accessible way. Very nicely done, and subbed!

  • @marcusjacob9117
    @marcusjacob911710 ай бұрын

    I would pay to get the music turned off. Very distracting. But very useful video, you explain it well.

  • @jaybny
    @jaybny Жыл бұрын

    best thing I've watched in years! awesome job 👍👌👍👌👍

  • @tropicarls
    @tropicarls24 күн бұрын

    So really I’ve been using monads for a long time now. Nice!

  • @JackDespero
    @JackDespero14 күн бұрын

    A monad is a function that takes an object of any type and returns the same type of object. Map and filter are two very understandeable monads. In Pandas, for example, getting rows by index is a monad, as you had a database before, and the function (selecting indices) returns you to another database object (to which you could further apply an index selection).

  • @JackDespero

    @JackDespero

    14 күн бұрын

    Monads are my favourite design pattern for functions that apply to something, and I never knew how to call "that type of function", until I discovered that they are called monads.

  • @OroborOSX11
    @OroborOSX11 Жыл бұрын

    The fact that Swift has built in operator support for optionals using ? is so nice. It’s nice to be able to wrap up this behavior into a simple type declaration like User? (equivalent to Optional).

  • @yahyaadinugraha1058

    @yahyaadinugraha1058

    8 ай бұрын

    dart as well

  • @user-tx4wj7qk4t

    @user-tx4wj7qk4t

    3 ай бұрын

    It's not equivalent

  • @semplar2007
    @semplar20079 ай бұрын

    very well put together explanation 👏

  • @gavintillman1884
    @gavintillman18847 ай бұрын

    I’ve been struggling with the concept and think this may be the best presentation I have seen.

  • @clementhoang7888
    @clementhoang78882 жыл бұрын

    Nicely explained!

  • @Mrhennayo
    @Mrhennayo9 ай бұрын

    Simply simple explanation sire !

  • @jongeduard
    @jongeduard9 ай бұрын

    Thank you for this extensive explanation! 👍It's really useful as a background knowledge behind a ton of things in Rust that I learned, also because I have seen many people already talking about it there. Now I really understand it. 👏 But even in C#, a language in which I have worked for about 20 years now, I can relate several examples of monads as well. A nice one are so called LINQ functions, for example SelectMany, which is basically the literal equivalent of your FlatMap example. LINQ is the name of the most important functional programming API in C# and DotNet. Maybe it is also a good to mention that C# was really one of the first with the async await programming model, and it might even be the absolute first one. Though what you mentioned as Future or Promise are not the terms how they are used in C#, but what is used is generally Task or ValueTask, although other types can also be used sometimes.

  • @JackDespero
    @JackDespero14 күн бұрын

    Just to be nitpicky, the wrapper of the type is not a part of the monad. The (in)famous sentence is true: A monad on A is a monoid of the endofunctors of A. This means that the it is a F: A -> A, meaning that both the original object and the end object must belong to the same category. In your examples, you are doing two different operations: - An isomorphism, F: U -> W, where U are all the unwrapped objects and W are the corresponding unwrapped objects. - A monad, G: W -> W, where the monad acts on any wrapped object and returns the same type of wrapped object. Not that it is fundamental to program or anything, as most of the time combining both is the easiest solution (multiple times my functions accept different types for certain arguments and I internally transform those arguments into the type that I actually use in the function, like passing the name of a matplotlib cmap, and then I get the cmap, but also allowing to pass a cmap itself). Another nitpick to make is that in pure functional programming, the "busy logic behind the scenes" cannot affect anything else other than the object being returned. For example, if instead of adding the log to the object you wrote it somewhere else, that also wouldn't be a monad, even if that function would work exactly in the same way, being able to chain it as much as you want.

  • @yellingintothewind
    @yellingintothewind9 ай бұрын

    I think a large part of the issue explaining Monads is the concept is actually so simple that there is a "why the special name?" question that makes people think it _must_ be more complex. It is a basic function-application pattern, the likes of which you learn the first time you write an async event loop, or implement a DSL-FSM (See Greenspun's 10th rule). And yes, just like the y-combinator, or lambda calculus, it has a basis and explaination in math that makes it look more complex than it really is.

  • @user-tx4wj7qk4t

    @user-tx4wj7qk4t

    3 ай бұрын

    None of what you said is true

  • @aoeu256

    @aoeu256

    3 ай бұрын

    In Javascript Promises/Futures are an example of a Monad, and in that case then is flatMap/ >>=. However, Monads generalize the idea of promises/futures to be able to embed any language with any sort-of semantics into the language, so promises/futures are a way of embedding asynchronous computing into a stateful language and have it look like synchronous code just like monads are used to embed imperative/stateful languages into purely function Haskell. The thing about monads is that you have to know their 5 other definitions and many other examples to see how monads can shorten your code by. You have to know Monads other definition like flatMappables containers where flattenable containers are called Monoids, Mappables are called Functors.

  • @manrikevillalobos6270
    @manrikevillalobos62703 ай бұрын

    Great explanation !!! Thank you very much!!!

  • @aysubetin-can6435
    @aysubetin-can64354 ай бұрын

    At last! Great video thank you so much!Great namings, wrapper instead of unit and run instead of flatmap or bind to explain the concept before the terminology. Please make more videos like this

  • @quinn_m
    @quinn_m2 жыл бұрын

    Big fat subscribe for this, made it so clear and gave great examples; thank you Alex

  • @eltongarcia6105
    @eltongarcia61058 ай бұрын

    Outstanding work! thank you so much.

  • @SaySaeqo
    @SaySaeqo9 ай бұрын

    That was seriouesly the absolute best intro to monads, thanks

  • @jeffg4686
    @jeffg4686 Жыл бұрын

    very helpful. Perhaps the only place that gave me a better grasp of monads

  • @peteryuen4481
    @peteryuen4481 Жыл бұрын

    The clearest explanation that I have seen👍👍👍

  • @Ma1ne2
    @Ma1ne22 жыл бұрын

    Awesome! Keep it coming!

  • @nicolaus8622
    @nicolaus8622 Жыл бұрын

    Dang. Within only 15 minutes you easily achieved what my professor in functional programming couldn't in an entire semester of 15 weeks lol. No seriously, this video has to be the best explanation for Monads one can find on KZread!

  • @denys-p
    @denys-p Жыл бұрын

    Just for reference, in C# flatMap for lists (actually, all collections that provide IEnumerble interface) is SelectMany in Linq. Future/Promise is the Task. One more interesting thing - async/await (combined with Task) is very close by it’s behavior and purpose to IO monad (not mentioned here) - it “infects” function so you need to make functions that call it async (or, at least, return Task) as well. And it brings a big mindset shift, starts building understanding that we want to keep “IO monad” part as small as possible, splitting logic and IO. It will allow to write most of tests without mocks at all. And the rest that works with “outer world” (db, user input, other services calls etc) better to test with real interaction, e.g. integration tests.

  • @o__sama
    @o__sama9 ай бұрын

    Amazing explanation, thanks !

  • @trontrontrontron4
    @trontrontrontron4Ай бұрын

    i watch a lot of videos on monads and they always focus on the generic aspect of the monad wrapper, but really this video nails behavior aspects which is what really matters. you can even write monadic code in C using this examples and still have great value using it.

  • @devnelson
    @devnelson Жыл бұрын

    Best monad video I've seen. Concrete examples in a familiar language!

  • @Lambda_Ovine
    @Lambda_Ovine Жыл бұрын

    Oh, so this is what they mean when they say that monads can be used to avoid side effects but can replicate the effect when you need to. Say for example, Instead of having a global array that is referenced and mutated by every function to concatenate logs into it, you can return a concatenated array as part of a monadic value, one that is created at the beginning of the chain and is returned as a value at every step of the way 'till the end. I mean, in this case we are using an array object, so it's probably still being referenced as a pointer, but still, the concept stands as it belongs to the chain of operations alone.

  • @IllIl
    @IllIl25 күн бұрын

    Bro, you're a legend. I've tried at least a dozen times before this to learn about monads. Wikipedia, googling, videos... was always left with the feeling that even though I didn't get it, the explanations were all trash. This video is so clear, I immediately understood the concept and how it was useful. And some old examples of monads that still rattled around in the skull suddenly made a lot more sense. Thank you.

  • @sergeiknyazev5564
    @sergeiknyazev55642 жыл бұрын

    Great explanation! Would love to see free monads as I'm struggling with those myself.

  • @kebien6020
    @kebien60209 ай бұрын

    "A monad is just a monoid in the category of endofunctors, what's the problem?" for anyone wondering, was satire from the beginning (though the first part was taken from a math book, where the sentence does make sense in context).

  • @danilmartyniuk
    @danilmartyniuk8 ай бұрын

    great explanation. I will definitely use monads in my projects.