 Welcome, dear friends. So, myself, yeah, I am Raghu and this is my friend Vijay here and we are going to give a small talk title should you know category theory, but yeah there is a y part also there just to tease you a bit. So, yeah without further ado, let me begin this talk. Yeah, I would just like to give a brief intro about both of us like Vijay and myself have been in what was known as service oriented architecture. So, we have been like we progressed from being a normal C developer C plus plus Java and then on to like what was known as web services back then and yeah that is why we basically like to joke that we are like we were doing lot of plumbing we are like plumbers between different disparate systems different interfaces and all those things. So, we have more than a decade of experience in like integrating complex systems both in Europe and US and Middle East and what not. So, as part of our experience we went on realizing that we are going to high level like we are just doing the integration job, but personally we both were very fond of programming and getting our hands dirty in code and like math and patterns and we are like the pattern no files I like to joke to Vijay that we like to find patterns in mathematics in numbers and in day to day life here in biology chemistry everything. So, in fact I was just thinking I was just discussing with Vijay that I saw a small snippet of a fact like yeah it might sound a bit gross, but just now all of you had lunch and may be you enjoy and all those things. So, there are tiny taste buds on our tongue and they require that the molecules of the food be transformed to a particular form to work. So, without our selection again it is doing a transformation and a mapping it is more like an adapter kind of a pattern. So, this integration related stuff led us from one thing to another, but then we were reaching to get our hands dirty with code and so from the past five to six years we have been working with startups in India where we get a lot of chance to get our hands dirty and really see the code upfront and be able to guide juniors as well as learn some of the nice design patterns and things like that. So, that is where we are and slowly as a progression of our search or our quest for the ideal way of programming things or doing things it led from one thing to another like object oriented and then less and then somehow we ended up with Haskell and category theory, Mathematica and things like that. So, yeah that is just briefly about us like just consider us as one amongst yourselves like fellow travellers on this journey of learning what is the best way to do things. So, yeah and I believe I have spoken on behalf of Vijay as well and we have been colleagues for more than eight to ten years right now. So, we have joined startups together and we were even quit a startup recently to completely dive into FP and category theory and machine learning and things like that for almost a year. So, lots of interesting things happened yeah. So, that is briefly about us I do not want to talk too much about us right now yeah. So, let me set the agenda right now in the beginning. So, for those of you who are expecting that this is going to be a detailed category theory tutorial I am really sorry I am really sorry to disappoint you guys, but yeah. So, I would like to just state it upfront that this is not going to be yet another category theory tutorial because we strongly believe that there are much more deserving people out there on the internet or in terms of books or whatever to teach what all this category theory entails. It is like a huge huge subject actually it is just like an extension of what we call as an algebra. So, algebra itself is like a huge kind of an abstraction over arithmetic. So, there are lots of resources out there and I am pretty sure that most of you are already on to that road right now. So, what this talk is not about is that it is not about what all is there in this category theory like what all are the concepts, but what we would like to talk about however is first of all like how did we end up here like what how did how did this category theory somehow you know insinuate itself into this stream of what we call as programming like most of the programmers will be like insinuated like what is this high high sounding category theory terms that are being bandied about left and right. So, I would we would just like to give a small brief overview of how how it came to be in this state right now that almost everybody left right and centre are talking about like category theory concepts. So, that is something that we would like to give because that perspective will help you to kind of appreciate why category theory is kind of important and it is going to be important even and then we would like to give a very brief overview into city just like dipping our toes into the waters of category theory just the basic concepts that we think are important and especially in the world of functional programming or what what we can term it as compositional style of programming and yeah and then of course most of you would have come here with some expectation that what is in it for me what is in it for me like this talk maybe I will give some kind of an overview of category theory and the history blah blah blah, but are there any insights that I can take from this talk. So, that tomorrow when I am faced with some kind of an integration problem or some kind of a problem maybe it will strike in my mind that there could be some beautiful pattern at work here. So, that you can apply something and get some a bang for your buck like yeah. So, that is going to be the agenda of this talk yeah. So, yeah basically one more thing I would like to say is like we would be glossing over the first part of this like mainly we want to focus on what is in it for you rather than you know dwell too much on the category theory terms and jargon which will be too esoteric for most of you because I believe that there are lots of you know newbies also out here not just experienced hascolars or experienced category theory I mean sure mathematicians or whatever but in mathematicians. So, we would like to kind of gloss over this first part a bit fast so that we can give proper you know coverage of a sample case study where we will show you like what category theory provides us. So, let us begin like how did we end up here. So, actually what we will have to say is like math is everywhere believe it or not or like whether you would like to agree or not like it is a bit of a philosophical thing as well, but mathematics is one of the underpinnings of reality right now like at least the closest description to reality and math is always full of abstractions like math provides lots of abstractions like a point or a line a line is composed of a series of points like how many points are there in a 1 centimeter line versus a 10 centimeter line again it is like infinity infinity infinity is again like an abstraction what is an infinity for an electron might not be an infinity for an elephant. So, even a 1 centimeter line can become seemingly like an infinity like math is full of abstractions and what is an abstraction abstractions are like tools that we humans have ourselves devised to make it easy to grapple with the complexity of this nature and to kind of communicate about those things and the funny part is even programming and computer science is chock full of abstractions left right and center like like you see that there is a type what is an integer, but is it like a proper mathematical integer again you have abstracted the mathematical concept of an integer and kind of cut some corners because there are some hardware limitations on how much an integer can be. So, again what you call as an integer is an abstraction and in terms of programming sometimes in games say you are doing a game development or whatever you will program in terms of abstractions called as an explosion a weapon see they are not like real weapons, but you have created some kind of an abstraction like instead of saying Ragu and Vijay we will say person of name X. So, that becomes an abstraction like we have abstracted away some details. So, programming and computer science also deals with lots of abstractions. So, it is kind of natural that whatever branch of mathematics deals with lots of abstractions is going to be a great fit with computer science and programming and that is exactly what category theory is. So, category theory is like a very you know it is it is been called as the mathematics of mathematics like it is like a meta kind of a mathematics. So, because it is so abstract yeah it can be applied almost to a very boring extent that you know you can say like everything is category theory. So, one more aspect of math at least the kind of math that programming people want to use is like math is pure in the sense like take for example, like sin x or cos x like the function does not do anything to the text there is no you know side of it is what we call as side of it is happening in that like every time I call sin 0 I will get the same value today tomorrow whatever, but that is not the case with say d b call like get the time get the current time or get me a random value again things keep changing. So, there are lots of complexities in trying to model the real world, but math is something that is pure and that is why like functional programming especially was initially based on the idea of you know these pure functions the so called pure functions from set theory where there is no side effects and because there are no side effects you automatically get what is called as referential transparency like I can always substitute an equivalent expression wherever that is being referenced and that if you translate into programming it gives you a lot of you know surety about the code. Because we cannot afford to be very lax in programming because right now programming is you know may be powering like nuclear weapons or like see I work at a startup which does medicine delivery. So, if you kind of goof up some way like the effects can be disastrous. So, that is why like F P provided a very strong foundation and yeah. So, to say that from where did this category theory come you will like to have to kind of go back to the evolution of F P itself like it all started with lambda calculus and I am sure like most of you will be knowing this history again and again I would not like to go into too much of details, but I think so it is my duty to kind of again pay respect to those pioneers who made this possible. So, lambda calculus this came in 1930 and in fact Haskell is kind of based on lambda calculus and most of the functional programming languages that they have and then somewhere down the line this is not directly related to F P as such, but in the 1950s. So, Saunders, McLean and Eilenburg. So, these people were studying like algebras and they came up with something called as a category and you know natural transformations between categories and things like that. So, just keep that in mind because it is going to come back pretty soon now and then in 1958 this was the first version of LISP thanks to John McCarthy and his students. So, they wanted to kind of implement the lambda calculus you know because they believed that lambda calculus is a very powerful tool a very expressive tool going forward in the field of artificial intelligence or like packed based systems and all those things and then once LISP came it became so popular it caught on so much that lots of different dialects of LISP sprung up and not just dialects of LISP, but many people began to attempt different variants of functional programming languages. There was like I Swim by Peter Landon and David Turner implemented many pure functional programming languages. So, there were lots of F P languages and also the Turing lecture has anybody gone through this paper like can programming be liberated from the von Neumann style by John Backus. So, there also he kind of proposed a pure functional programming language and one more landmark paper like which is very small paper, but we strongly recommend that all newbies in functional programming go through this because it really shows what can be achieved if you just have like simple functions and especially if you can kind of abstract away the specifics like and have the generic thing being done by a higher order function and all those things. So, that was one more landmark paper and yeah. So, as I said like there were many F P languages. So, I have developed a language my friend here who has come to a conference has developed his own language, but now we cannot communicate with each other. We do not speak a common language. So, the community became like restless like how can we kind of create a research vessel which can kind of hold all or cumulative ideas of what functional programming should be. So, that is when a committee of researchers came together and finally yeah one of our favorite languages Haskell was born in 1990 version 1.0, but yeah as a newborn baby is born like there are lots of some teething problems as well. So, initially Haskell was they decide that we will really stick to purity. We just want like pure functional programming language like only one function takes inputs it only depends on the inputs and it cannot do anything with the inputs and it simply returns some value, but is it of any use because the world is powered by side effects like see the user might want to enter some n and get back the square of that n. So, sometimes you might want to do a DB query. So, that involves side effects. So, initially Haskell got stuck at this layer like how to model side effects that was like a very tough problem that they faced and the functional programming languages that came before Haskell have somehow gotten around this by you know giving some kind of a back door like yeah okay we will make it like mutability is allowed then just for side effects and all around self give like mutability or whatever, but Haskell people like do not budge to this temptation. So, they just stuck it they just stuck it and they just stuck it. So, they were just waiting like is there any solution from pure mathematics because we are trying to model things from pure mathematics like how can I model random function now because right now if I call random it returns me 3 for example after 5 minutes if I call random it gives me 5 like what argument is that random function taking because pure function says that if I give the same argument again and again it should give me the same value then they were looking for the solution and yeah this landmark paper really like broke that jinx like it is called as notions of computations and monads by Eugenio Moji and there he showed like how even these so called side effects the side effects can be different kinds of things like your program encounters and exception like I am running a very extensive computation and the hard disk crashes or whatever like an unexpected situation an exception or non-determinism all these different kinds of effects can be modeled using a concept from the category theory which was like almost like 50 years ago called as monads. So, he showed how monads can be used to kind of represent computational effects. So, this was a landmark paper and then yeah just having a landmark paper would not cut it like somehow someone has to kind of do the work of bringing it into the language that was stuck without having this facility for side effects. So, Philip Wadler and yeah they came up with this concept of bringing in monads in Haskell they even came up with the concept of type flashes which are a bit like interfaces in Java. So, that is how like monads got incorporated into Haskell and yeah. So, now we would like to give a small category theory intro yeah I hope it is ok that we just lost through these details. So, yeah maybe you can see how category theory it did not purposely come there they were really stuck with the problem and they just happened to see that category theory solved that very elegantly and then not just monads people went on discovering more and more patterns. So, in fact if you see there are lots of things right now from the category theory it equal like lenses or whatever like. So, that is how category theory came to the mainstream just like say in physics we have string theory like someone saw like oh just an equation for a string can describe some particles and processes and what not. So, that is how string theory has come into mainstream physics. Similarly, category theory came into Haskell and other programming languages. So, right now we will give us very brief intro a very very brief intro of what we think is the core concept of category theory it is only like very simple yeah. So, category theory talks about objects and morphisms. In fact some authors even say that it should be called as the mathematics of arrows yeah I think so Stephen awardee I think so he jokingly says that. So, category theory kind of studies objects and their relationships. So, there are a bunch of objects a set of objects and then a bunch of morphisms I do not want to use the word set yeah I am sorry, but yeah a bunch of objects and then there could be a bunch of morphisms morphism morphism in the sense there might be a relationship between this object and this object, but how mathematicians view it as this object is morphing into this object. So, it is like a transformation and some people even call that as a mapping a simple mapping and one more requirement in category theory is that these morphisms should compose and I believe most of you have kind of gone through this high level intro to category theory already. So, and one more thing for a category is that the composition operator there like that is like f f dot g dot h that should also satisfy three laws these are called as the category laws also like there is an associativity law like it does not matter in what order I compose I am kind of piping together or stringing together these morphisms and also there should be a left identity as well as a right identity like there should be some kind of what to say if I take an example of an addition there should be a zero so that there is an identity element like even if I add it to the zero again I get the same object back. So, these are the only basic requirements for you to form a category yeah correct correct correct yeah and do not worry I we would not go into too much of these details because we would quickly go into what insights this can provide with only a very minimal amount of understanding some examples of a category the set itself what we call it as set is also kind of a category it is called as the category set where the objects are themselves like sets and the morphisms are mappings. So, there could be something like the set of natural numbers and then the set of perfect squares. So, again there is a mapping there are lots of mappings that mappings is nothing but that x square is that mapping so and then there is also this popular category called as has which you will encounter a lot if in case you are kind of dealing with Haskell and has is nothing but the objects are types because sometimes you know a type can be viewed as a set of values a set of allowed values. For example, a Boolean type is a set with only two values like true and false and then the morphisms here are the functions in Haskell. So, that is why if you have a Haskell function the type signature clearly says like it is like a mapping from int to int. So, I gave an example of a set I gave an example of a Haskell these are two categories there is also a category called as cat just bear with me where the objects themselves are categories one level further one level further the objects themselves are categories and the morphisms there are what are called as funtors. So, a funtor is a way of kind of you know mapping one category into another category. In fact, it has deep implications. So, they even say that it can kind of represent like a transfer of knowledge from one field to another field like if a field is considered like a category. So, just bear with us. So, a funtor is nothing but a morphism where the objects themselves are categories and in Haskell it so happens that there is already a category in Haskell and you do not have any other category. So, if you just replicate if you just copy paste two Haskell categories and kind of imagine a morphism or it is like if you if you can allow me to say that it is a it is a morphism back into Haskell itself some category and it is a morphism back into that only like that is why it is called as an endofunctor sometimes you might have heard of the term endofunctor it is nothing but an endomorphism a morphism onto the same category. So, yeah this this whole thing becomes one object and yeah such a category is called as the category cat and then a funtor is a morphism in such a category and the main thing you would like you should remember is like funtors and all other things are like see a monoid is also a funtor and applicative is also a funtor and I believe many people attended talk just now about monoids applicatives and funtors of course. So, funtors are the basic things in category theory and we will shortly see like how funtors can come into play if you just know these like basic laws and if you can find some operation like that. So, here there is just a dot operator, but there can be many other operators like that can be a plus that can be a clisely arrow that is what we will show now shortly. So, this is what you need to kind of understand. So, initially when we were studying category theory we always tripped up in that part only like what is this funtor like where the category categories are objects. So, but the category actually is has those objects are like has and yeah I think so enough of me and I think so I will just give way to Vijay who will just give a small glimpse of category theory. Everybody is still awake. Yeah, we just had lunch. So, I think he did a very good job at convincing you guys that okay math is important at least that much because at least Haskell is the way it is today because of that math. So, at least that is good enough reason to for us to believe that hey it's going to be important math is important. So, but just so that I don't talk too much about jargons and other things in the category theory. How many of you have already tried to learn and gone beyond the basics? How many of you tried and gone beyond gone beyond the basics things? Okay, few hands. Monads. Monads. Monads. In the category theory not in the typical okay monad is a type class kind of way but from the categories not many. So, okay. So, I will try not to go too deep into that. So, what we are going to do here is so that's what our agenda was not to get too much into the depths of category theory but try to give you an example application and see and start from the solution space. If you are beginning beginner in Haskell and the way you learn about these things is they make you write some code and say hey see now you can see this pattern repeating hey this is a this matches the functor program we wrote earlier this is the same pattern so we can make this but that is not the way we usually write our application or conceptualize our application we think how do we model our application say if you are an object oriented board you would think of your object model or you would think of all the patterns that you would use and then you think of how do I write it in your particular language the same way we think of all the functions if you are you know see your similar languages your approach is different but here at least in the beginning stages what we learn is we were taught to look for those patterns and then okay refactor your code to use a functor or a monad because that is how we do so what I want to at least I will try to do is given a solution given a problem can we model it using what we call category theory and then come to code can we identify the subtraction as I said abstractions are the core of programming then can we start from the subtraction we say category theory is all about abstraction can we start with the subtraction and come down to has to so that is what we are trying to explain here we are exploring that here today so what we are this is the example that we are taking so we are trying to model a tree drove what I will try to explain this problem it is a tree as in not a binary tree it is a tree that we see everywhere and a tree grows every year duration of time it keeps growing as long as it is alive it keeps growing like there is a likelihood of being hit so it doesn't have somebody cut it down natural disaster so that happens a fallen tree doesn't grow what do we need to do after a certain number of years we want to calculate what is the probability of that tree being hit or fell or we want to calculate that so this is what we want to do we know that this is a probabilistic model we want to calculate the probability of your tree being in a particular state after such and such type so what we are trying to do now right how do we do it at least we try to do something so I think from the problem statement itself we can derive few things so what are the possible states tree can be right I think you can guess it can be alive it can be hit it can be right one of the three states that it can be right and distribution right we know already because we already realize that it's a probability distribution so we have to somehow represent that distribution right so this is one way of representing that right an associated list a state and the probability say probability of it being alive is point three right and probability of it being fallen is so and so so we can represent that and there are things that can happen right so what do we want to do with these states we have states and we have distribution what can we do with right a tree can grow we hit and fall this is what we can do year on year this is what we do these are the things that we already know from our generic problem domain so what is this what are we trying to do here so every year a state is transitions into a probability of that state after that year what we want to achieve is given a particular state a tree in a particular state what is the distribution of that right a state to it's distribution that is what we want to identify lost any questions it is yeah it's a set of states that's nothing special about that notation yeah one small example I would give you like in case you are doing a coin toss then the distribution would be assuming like it's an unbiased coin it will be a list of two like head 0.5 tail 0.5 and here one more thing I would like to point out here is that this is more like a you know dependent kind of an event like once it falls again it cannot be alive or grow so the output actually is required for the next the next stage yeah so what he is trying to say after year one so we say we start with coin toss we take a coin toss the very popular example so first each coin toss is independent so every time you toss its probability is going to be 0.5 an unbiased coin right but if it is continuous I mean if you want to take a progression of that so what is the probability of two successive heads or two successive tails then you have to feed in the result of first iteration into the second state right so we are transitioning one so now you have to feed that into the next stage the probability of being alive after year one that is input for the second year whatever it is so we want to chain that event that we are so you can think of that already so you know that so this is what we will end up with so we have a state and we want to get a distribution of it and then we have to chain those things state to distribution right so what do we see here right so I am kind of giving you the same diagram which is there right he already given you the example of how the functor so you can see this is again the same category he give you the example of functor so FAA FBFC are the functors so we are in a category of functors why did I come here yes so this is where the trick is right what what are we trying here so FAA so it's just the name right I gave we want to start distribution so what we are trying to do is given a state we want to somehow come up with that distribution right so if you consider a state each state now you want to somehow get into it's distribution so think of states as a category now right state is a category and distribution is another category and we have to somehow take your states into distribution don't go there yet right so what we want to achieve the last point you have say think of so let's generalize it so you have something right a set of things right states so think of them as a category right it has objects right what we want to do is we want to morph them into another category which is distribution right so you want something a state to distribution for example if I have a coin and a distribution of so you want to take a given a coin what you want is a distribution say normal distribution is different uniform distribution say for coin toss it is using uniform distribution 0.5.5 right so or you can have your own distribution whatever distribution is it it need not be uniform all the time so what you want to get is given a particular set of things you want to get a distribution of it right so that is the information that we are doing so if you think of these as two different category of objects right distribution is a category of object your state is a category of objects what you want to achieve is somehow getting from states to distribution now if you are still not lost this is what we learned in functors from one category into another category right that is what we want to do here so at this point you are already thinking oh my distribution is a functor I don't know how we are going to represent distribution but I already know if you model these things as categories you already know my distribution is a functor because I want to take it from here to here we don't know anything else but we know that is the beauty of category theory we don't go into the depths of what inside each object we don't know the structure of relationship between whatever objects we are just looking at objects their morphisms and there are certain loss so that is where we want to stay we don't know how distribution is represented we don't know how state this is just to explain you so we don't know anything particular but we know distribution is definitely going to be a functor right so we already know that now he mentioned one more thing right that we want to change those things so we have we will not so you know he talked about composition how many of you already know what composition is almost everyone good so what does composition do given two functions we compose them right so what does it mean to compose now so what we already we already know that we have this events right which is some states or some distribution and we want to apply it again and again so one year we got a distribution and then the second year it's the same thing right the distribution of the two year is the distribution whatever the value of so if you are looking for whether it is alive probability of the tree being alive so whatever is this probability of the year one do the same thing again for year two right so we are composing again same thing you are composing you are trying to compose what we have already right so we know how to transform your state into your distribution we want to do it again so you are composing them right so coming back to your category theory right all we know is so initially what we had so I will just give you a simple look at id and return your look at the dot or composition the signature of b to c a to b a to c right composition and you know that part look at the second thing it looks same but it is mc I don't want to use the m word right so it's a good time to do that maybe he talked about being no functor being fun so what we are trying we are trying to compose something and we are composing a same thing right this example here b to mc a to mb a and b are different we are trying to compose but in our case it's the same thing we are trying to compose the same thing we don't have two different things we have to compose two distribution or transitions as we call them so we want to compose the same thing what is that concept which allows you to compose similar things it's a monoid right so like addition the triplet addition so your monoid you compose the same thing so we come up with that stream so there are some terms that we already know something is a monoid in endo functor this famous code right so we know it's a monoid whatever we have so this is clear now we want to make our distribution whatever we call a monoid because we want to compose them it was already a functor we want to use it as a monoid now we want to compose them it's already a monoid and we know in has everything is an endo functor so something is a monoid in the category of endo functor that is m or monad monad is a monoid in the category of endo functor the very infamous thing so we got there so we already know that my distribution is a monad I don't know anything about its internal details I already know it's going to be a functor it's going to be a monoid and it's a monad right so once I know this how do you so how do you look at this b to the arrow right the equation below the composition that's called the claysley arrow because we are in the claysley category so this is so we are composing those functors right we are composing monides in the functor so look at this type signature for this fish or left fish as you as you as popularly known b to mc a to mb right so mc and mb are our functors but in our case because we are dealing with distribution so it would be a to distribution of a and again a to distribution of a because we want to apply the same thing again right our transformation applied again and we get a to distribution of c so what we want to use is this claysley arrow in our program so we are composing such things right so we know so now it's all about so now we know we have already modeled your program using okay now already I know what my it's only the internal details how you represent distribution I think we got a simple model where we express distribution as a associated list so we have a probability and one more thing about this solution what we came up with so we started off with solving a specific problem of tree growth it was we were supposed to solve tree growth it was only supposed to work for tree structure but we never mentioned tree anywhere we came up with a very generic solution that works with anything where you want distribution probability distribution so replace a here right distribution of a right so you know all the parametric types so replace a with tree replace a with coin you got distribution of coins so you got a very generic solution even without putting any effort at making it generic that is the beauty of category theory you are working at a level where you are not at all dealing with the specifics of your problem but you get a generic solution because the way category theory is defined we are still with the very basics but we achieve this even without any effort all you want to do is put the specifics right so that's what we are talking about here the distribution type is mod okay now we want to put an event as dice okay what are the possible states of a dice like 1 to 6 you want to do a coin toss or you want to do a Monte Hall problem same solution that is nothing different you just how do you use it so you solve the problem without even so you know what it is how it looks like now you will change your fit in your internal details probably coming from the study stock probably hold even your equipment do what you are best for you fill in the dots right this example even though in a different way this example that I took is available in this functional pool right but even though they don't start with the way we describe they give you the total solution of how to do it approach that from a different angle we started from the category theory and came to the solution they follow a slightly different approach right so you can go read it you get I think we are running out of running out of time sorry this one the main problem there is like the problem with all these so called like academic papers or like academic papers or functional at least functional parts are a bit clear but most of these academic papers a newcomer won't understand like won't get a feel for how they arrived at the result what they simply say is that we have modeled the probability distribution as a monad and that gives us great powers but why like why or how did you get that intuition to model the probability distribution as a monad so that was what our quest has been like and it will continue to be and just to conclude like of course like to reiterate the same thing mathematics provides lots of abstractions and abstractions are really powerful tools to deal with complexity like we say like there is something plus something use something like kind of try to like push the details push the details postpone the details and then try to deal with things and then of course design patterns algorithms data structures like just because you know that a list is kind of ordered in a way then you are able to apply binary search a very powerful algorithm for free if you just kind of come into that abstraction and then you know the certain properties that are applicable if that abstraction is satisfied then you get lots of things for free and why shouldn't we use make use of this that is our main thing and of course there is a kind of synergy needed between you know just bad theory and practice like if people go on doing like esoteric terms and esoteric research in terms of category theory and writing big big terms and nobody kind of explains to the layman like there are lots of popular authors like Gabriel Gonzales has lots of interesting articles in fact in 2016 if I am not mistaken he has written a blog where he considers the electoral distribution of voters distribute like votes distribution in a constituency as a monad or a monoid so in fact yeah but this this functional pearl predates that by much much longer time so there is a kind of synergy needed between like the so called researchers and mathematicians and the so called engineers the engineers also have to kind of put some effort to try and appreciate what what what is the beautiful things of mathematics or like basic research yeah sure yeah sure I am just wrapping up this is the last slide actually and yeah and even yeah sure sure yeah yeah then I would like to stop it at this slide for those of you who think like why should I learn category theory but yeah my answer is like we do not know what we do not know so you will not know the joy of knowing yeah