Created
November 13, 2022 18:17
-
-
Save bobbicodes/405708adcfbb752d9f07d5b5ccb16664 to your computer and use it in GitHub Desktop.
Transcript: YOW! 2013 Philip Wadler - The First Monad Tutorial #YOW
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
[[{"text": "so this is the first monad tutorial", "start": 0.03, "duration": 8.34}, {"text": "these days there are lots of monad", "start": 3.54, "duration": 9.509}, {"text": "tutorials for Scala or Perl or I think", "start": 8.37, "duration": 7.229}, {"text": "that's channel 9 at Microsoft in the", "start": 13.049, "duration": 5.48}, {"text": "bottom corner and one called yet another", "start": 15.599, "duration": 6.151}, {"text": "presentation on loan ads and they have", "start": 18.529, "duration": 5.621}, {"text": "all sorts of complicated diagrams in", "start": 21.75, "duration": 5.15}, {"text": "them so you can point with this thing", "start": 24.15, "duration": 5.67}, {"text": "going what have we got here", "start": 26.9, "duration": 6.79}, {"text": "this is plumbing this is spacesuit this", "start": 29.82, "duration": 8.43}, {"text": "is burritos and this is funny boxes with", "start": 33.69, "duration": 8.04}, {"text": "balls in them but but remember that", "start": 38.25, "duration": 8.149}, {"text": "symbol okay that symbol is important", "start": 41.73, "duration": 4.669}, {"text": "right - you're all computer scientist so", "start": 48.5, "duration": 3.52}, {"text": "you're not scared by funny looking", "start": 50.61, "duration": 6.15}, {"text": "symbols right good actually we're quite", "start": 52.02, "duration": 7.519}, {"text": "are you scared by funny-looking symbols", "start": 56.76, "duration": 11.73}, {"text": "okay and you can get monads in all sorts", "start": 59.539, "duration": 12.821}, {"text": "of languages so you've got Haskell just", "start": 68.49, "duration": 5.46}, {"text": "go for your segments so this is very", "start": 72.36, "duration": 3.299}, {"text": "colorful pointer writing people", "start": 73.95, "duration": 4.08}, {"text": "sometimes get nervous but you don't need", "start": 75.659, "duration": 3.78}, {"text": "to be nervous as long as you're", "start": 78.03, "duration": 5.55}, {"text": "well-behaved and you can see the Haskell", "start": 79.439, "duration": 6.93}, {"text": "logo actually has built into it this air", "start": 83.58, "duration": 4.95}, {"text": "greater than greater than equal sign", "start": 86.369, "duration": 3.661}, {"text": "which is the monad thing as well as", "start": 88.53, "duration": 3.78}, {"text": "having a lambda built into it then we've", "start": 90.03, "duration": 5.82}, {"text": "got closure f-sharp g-sharp Scala Python", "start": 92.31, "duration": 5.28}, {"text": "we've already heard of Perl so there's", "start": 95.85, "duration": 3.78}, {"text": "lots of languages that use these things", "start": 97.59, "duration": 5.55}, {"text": "and a huge number of tutorials many of", "start": 99.63, "duration": 7.04}, {"text": "them based on some weird kind of analogy", "start": 103.14, "duration": 6.78}, {"text": "so here's the thing about this tutorial", "start": 106.67, "duration": 8.199}, {"text": "it will contain zero analogies and you", "start": 109.92, "duration": 6.87}, {"text": "might have heard that monads come from", "start": 114.869, "duration": 5.25}, {"text": "category theory I have a colleague who", "start": 116.79, "duration": 4.939}, {"text": "refers to category theory as", "start": 120.119, "duration": 6.741}, {"text": "intellectual terrorism so if you've been", "start": 121.729, "duration": 7.241}, {"text": "exposed to that kind of terrorism you", "start": 126.86, "duration": 3.849}, {"text": "might be worried but don't worry you", "start": 128.97, "duration": 4.349}, {"text": "need no category theory", "start": 130.709, "duration": 6.81}, {"text": "whatsoever to understand this talk okay", "start": 133.319, "duration": 7.381}, {"text": "all of you have the right background to", "start": 137.519, "duration": 6.75}, {"text": "understand this talk so please if I say", "start": 140.7, "duration": 5.909}, {"text": "something you don't understand raise", "start": 144.269, "duration": 5.881}, {"text": "your hand and ask a question okay I", "start": 146.609, "duration": 5.58}, {"text": "might accidentally forget to explain", "start": 150.15, "duration": 4.41}, {"text": "something you should be able to follow", "start": 152.189, "duration": 5.011}, {"text": "along if you can't please just ask a", "start": 154.56, "duration": 5.16}, {"text": "question if you're embarrassed to ask a", "start": 157.2, "duration": 5.28}, {"text": "question turn to the person next to you", "start": 159.72, "duration": 5.519}, {"text": "and say he just makes it suitable I", "start": 162.48, "duration": 4.289}, {"text": "don't know about puzzles you know about", "start": 165.239, "duration": 3.75}, {"text": "Mosel and maybe they'll say oh yeah", "start": 166.769, "duration": 4.981}, {"text": "whose lives of such and so but probably", "start": 168.989, "duration": 4.711}, {"text": "they'll take no I don't know about foods", "start": 171.75, "duration": 3.569}, {"text": "either and then you can raise your hand", "start": 173.7, "duration": 8.7}, {"text": "and ask okay oh yeah and then we thought", "start": 175.319, "duration": 12.301}, {"text": "of course all the means trapped in monad", "start": 182.4, "duration": 6.57}, {"text": "tutorial please help", "start": 187.62, "duration": 6.649}, {"text": "and the monad tutorials are coming and", "start": 188.97, "duration": 10.109}, {"text": "here is monad man I thought oh this is", "start": 194.269, "duration": 7.21}, {"text": "just something somebody found some", "start": 199.079, "duration": 5.55}, {"text": "superhero with an M on their chest but", "start": 201.479, "duration": 6.781}, {"text": "actually if you look down there you can", "start": 204.629, "duration": 6.92}, {"text": "see he really wanted a is Katie", "start": 208.26, "duration": 3.289}, {"text": "here.thank Katie for monad man a round", "start": 212.239, "duration": 7.53}, {"text": "of applause for KD and monad man", "start": 215.94, "duration": 3.829}, {"text": "and here's a graph of the amount of", "start": 222.58, "duration": 10.45}, {"text": "known monad tutorials and this is just", "start": 228.44, "duration": 6.99}, {"text": "for Haskell okay not any of the other", "start": 233.03, "duration": 4.679}, {"text": "languages and you notice that in the", "start": 235.43, "duration": 5.6}, {"text": "1990s it suddenly goes from zero to one", "start": 237.709, "duration": 9.331}, {"text": "that's the one you're about to see so", "start": 241.03, "duration": 10.17}, {"text": "here it is the first monad tutorial and", "start": 247.04, "duration": 8.52}, {"text": "I need to say maybe just a little bit to", "start": 251.2, "duration": 7.689}, {"text": "motivate why one would want a monad so", "start": 255.56, "duration": 7.88}, {"text": "monads are there we go there's me and", "start": 258.889, "duration": 11.121}, {"text": "I'm facing this tension so um to my", "start": 263.44, "duration": 12.43}, {"text": "right there is a lambda sign how many", "start": 270.01, "duration": 9.52}, {"text": "people recognize the lambda okay now all", "start": 275.87, "duration": 7.019}, {"text": "of you do good you know so I thought", "start": 279.53, "duration": 5.88}, {"text": "those nice silver one here that was made", "start": 282.889, "duration": 4.321}, {"text": "for me as a gift by one of my students", "start": 285.41, "duration": 5.1}, {"text": "so what lambda represents is the lambda", "start": 287.21, "duration": 6.0}, {"text": "calculus and more importantly a nice", "start": 290.51, "duration": 5.64}, {"text": "sound simple theoretical basis for", "start": 293.21, "duration": 5.16}, {"text": "computing that has no side effects", "start": 296.15, "duration": 5.76}, {"text": "whatsoever right normally when somebody", "start": 298.37, "duration": 5.85}, {"text": "explains computing to you the first time", "start": 301.91, "duration": 3.75}, {"text": "they say well there's a variable here", "start": 304.22, "duration": 3.18}, {"text": "and that's a box and you put stuff in", "start": 305.66, "duration": 3.72}, {"text": "the box and immediately you're often", "start": 307.4, "duration": 4.62}, {"text": "analogies lambda calculus can be", "start": 309.38, "duration": 5.28}, {"text": "explained very simply you have a term", "start": 312.02, "duration": 6.33}, {"text": "and it's equal to another term which is", "start": 314.66, "duration": 6.9}, {"text": "equal to another term and everything can", "start": 318.35, "duration": 5.819}, {"text": "be explained by substituting equals for", "start": 321.56, "duration": 5.57}, {"text": "equals and that's it so it's a wonderful", "start": 324.169, "duration": 8.971}, {"text": "simple model of computing and that's", "start": 327.13, "duration": 7.75}, {"text": "what we want to make use of now I know", "start": 333.14, "duration": 3.18}, {"text": "not all of you are convinced by that", "start": 334.88, "duration": 5.7}, {"text": "that's fine but you all will be right", "start": 336.32, "duration": 7.14}, {"text": "this is how the world is moving right", "start": 340.58, "duration": 5.28}, {"text": "twenty years ago nobody is using Haskell", "start": 343.46, "duration": 6.9}, {"text": "these days it's used at major banks the", "start": 345.86, "duration": 6.36}, {"text": "main - Haskell developers our time and", "start": 350.36, "duration": 3.199}, {"text": "Peyton Jones in time and Marlowe", "start": 352.22, "duration": 3.469}, {"text": "they were both at Microsoft Simon", "start": 353.559, "duration": 3.45}, {"text": "Marlowe's just been hired away by", "start": 355.689, "duration": 2.3}, {"text": "Facebook", "start": 357.009, "duration": 3.69}, {"text": "lots of people these days are using", "start": 357.989, "duration": 6.88}, {"text": "functional languages because when", "start": 360.699, "duration": 6.78}, {"text": "there's no side effects the interface to", "start": 364.869, "duration": 4.59}, {"text": "the function tells you everything there", "start": 367.479, "duration": 5.52}, {"text": "is to know and that level of modularity", "start": 369.459, "duration": 8.3}, {"text": "is really helpful in developing programs", "start": 372.999, "duration": 7.13}, {"text": "okay so the great thing is it makes", "start": 377.759, "duration": 6.07}, {"text": "everything completely obvious and that", "start": 380.129, "duration": 5.62}, {"text": "gives you great structuring properties", "start": 383.829, "duration": 4.59}, {"text": "and in particular these days when we", "start": 385.749, "duration": 4.95}, {"text": "want to make things concurrent it's very", "start": 388.419, "duration": 5.34}, {"text": "helpful because if something's making", "start": 390.699, "duration": 5.49}, {"text": "use of assignment and of two concurrent", "start": 393.759, "duration": 3.93}, {"text": "things making use of assignments you", "start": 396.189, "duration": 2.7}, {"text": "have to worry about how those", "start": 397.689, "duration": 3.99}, {"text": "assignments interleave right shared", "start": 398.889, "duration": 6.87}, {"text": "memory is the root of all evil so if", "start": 401.679, "duration": 5.58}, {"text": "you're in a pure functional language", "start": 405.759, "duration": 4.32}, {"text": "there's no assignment it's much easier", "start": 407.259, "duration": 5.49}, {"text": "to get things to work concurrently or in", "start": 410.079, "duration": 6.56}, {"text": "parallel I'm not saying it's easy but", "start": 412.749, "duration": 6.84}, {"text": "I'm saying that by not having to worry", "start": 416.639, "duration": 5.17}, {"text": "about lots of assignment going on you", "start": 419.589, "duration": 4.41}, {"text": "can focus on the real important problems", "start": 421.809, "duration": 5.64}, {"text": "in making something concurrent ok so", "start": 423.999, "duration": 6.3}, {"text": "functional programming there me with my", "start": 427.449, "duration": 6.36}, {"text": "lambda everything is wonderful I'll show", "start": 430.299, "duration": 5.76}, {"text": "you how wonderful right my daughter is", "start": 433.809, "duration": 4.26}, {"text": "old enough it and she now makes stuffed", "start": 436.059, "duration": 4.801}, {"text": "fuzzy toys to give to me rather than me", "start": 438.069, "duration": 4.77}, {"text": "giving them to her this is the land that", "start": 440.86, "duration": 7.229}, {"text": "she gave me okay and it's fuzzy I want", "start": 442.839, "duration": 7.08}, {"text": "you to think about that right lenses are", "start": 448.089, "duration": 5.01}, {"text": "fuzzy comfortable things but they're not", "start": 449.919, "duration": 5.31}, {"text": "scary theory they are your friends you", "start": 453.099, "duration": 4.38}, {"text": "want to cuddle up to them they want to", "start": 455.229, "duration": 6.15}, {"text": "cuddle up to you okay so everything's", "start": 457.479, "duration": 5.06}, {"text": "wonderful", "start": 461.379, "duration": 6.42}, {"text": "so why on my other side am i plagued by", "start": 462.539, "duration": 7.33}, {"text": "these three demons what are these three", "start": 467.799, "duration": 5.43}, {"text": "demons so we've got the the up arrow of", "start": 469.869, "duration": 7.17}, {"text": "exception raising the Kohen equal of", "start": 473.229, "duration": 8.61}, {"text": "assignment the great evil and the curly", "start": 477.039, "duration": 9.84}, {"text": "sheet of output and remember I said two", "start": 481.839, "duration": 5.461}, {"text": "great", "start": 486.879, "duration": 2.82}, {"text": "thing about pure functional programming", "start": 487.3, "duration": 7.01}, {"text": "is it makes it completely obvious", "start": 489.699, "duration": 10.771}, {"text": "everything that's going on but indeed it", "start": 494.31, "duration": 8.56}, {"text": "can sometimes make things painfully", "start": 500.47, "duration": 6.99}, {"text": "obvious right you have a lot of detail", "start": 502.87, "duration": 6.539}, {"text": "in those cases where you actually do", "start": 507.46, "duration": 4.32}, {"text": "need to pass around state and it does", "start": 509.409, "duration": 6.51}, {"text": "happen right passing that around can get", "start": 511.78, "duration": 7.77}, {"text": "a bit painful so there's things for", "start": 515.919, "duration": 5.61}, {"text": "which sometimes you would think yep", "start": 519.55, "duration": 4.109}, {"text": "exception handling is just the thing", "start": 521.529, "duration": 4.591}, {"text": "outputs just the thing assignment is", "start": 523.659, "duration": 4.351}, {"text": "just the thing and when you need them in", "start": 526.12, "duration": 3.63}, {"text": "your in a pure language what you're", "start": 528.01, "duration": 7.35}, {"text": "going to do not Ghostbusters monads okay", "start": 529.75, "duration": 7.98}, {"text": "so that's what we're going to do so", "start": 535.36, "duration": 4.169}, {"text": "you're ready to program we're actually", "start": 537.73, "duration": 3.33}, {"text": "going to do some coding here are you", "start": 539.529, "duration": 5.18}, {"text": "ready to code are you ready to code", "start": 541.06, "duration": 5.969}, {"text": "let's see we'll skip over that from are", "start": 544.709, "duration": 9.88}, {"text": "you ready to code in Haskell how about", "start": 547.029, "duration": 9.3}, {"text": "are you ready to code in Scala", "start": 554.589, "duration": 5.071}, {"text": "oh that's less maybe we should go back", "start": 556.329, "duration": 6.781}, {"text": "to the Haskell talk right so I gave the", "start": 559.66, "duration": 6.81}, {"text": "talk in Haskell last time and lots of", "start": 563.11, "duration": 5.76}, {"text": "people hood and one reason they went is", "start": 566.47, "duration": 4.619}, {"text": "perfectly reasonable which is rewrite", "start": 568.87, "duration": 4.14}, {"text": "function application differently and I", "start": 571.089, "duration": 3.661}, {"text": "even forgot to explain that clearly at", "start": 573.01, "duration": 3.12}, {"text": "the beginning which is why you have to", "start": 574.75, "duration": 3.3}, {"text": "all ask questions if you don't", "start": 576.13, "duration": 3.149}, {"text": "understand I'm not going to blame myself", "start": 578.05, "duration": 3.45}, {"text": "for not explaining nobody in the", "start": 579.279, "duration": 5.701}, {"text": "audience asked who on them yeah no I", "start": 581.5, "duration": 4.829}, {"text": "should have explained it's really my", "start": 584.98, "duration": 5.849}, {"text": "fault but ask anyway so this time around", "start": 586.329, "duration": 6.87}, {"text": "so that function application is written", "start": 590.829, "duration": 3.421}, {"text": "in the style that looks more familiar", "start": 593.199, "duration": 3.241}, {"text": "and I think that actually is very", "start": 594.25, "duration": 5.07}, {"text": "helpful for audiences indeed my new", "start": 596.44, "duration": 5.55}, {"text": "functional language length uses that", "start": 599.32, "duration": 4.86}, {"text": "style of function application so we're", "start": 601.99, "duration": 4.68}, {"text": "going to do it in Scala you can see it", "start": 604.18, "duration": 4.8}, {"text": "in a more familiar way and long the way", "start": 606.67, "duration": 3.96}, {"text": "we'll see some definitions of the word", "start": 608.98, "duration": 5.099}, {"text": "monad so it actually monad noun 1", "start": 610.63, "duration": 7.519}, {"text": "philosophy any fundamental entity", "start": 614.079, "duration": 6.631}, {"text": "especially if autonomous on", "start": 618.149, "duration": 3.731}, {"text": "sure that makes you feel much better", "start": 620.71, "duration": 5.73}, {"text": "okay so there it is in Haskell and I", "start": 621.88, "duration": 6.18}, {"text": "think there's one other thing that", "start": 626.44, "duration": 4.71}, {"text": "really threw people which is like I said", "start": 628.06, "duration": 6.06}, {"text": "it in an italic font so it looks all", "start": 631.15, "duration": 5.85}, {"text": "pretty like mathematics and everybody", "start": 634.12, "duration": 6.72}, {"text": "said Oh mathematics I am not worthy but", "start": 637.0, "duration": 5.97}, {"text": "don't be afraid of mathematics right", "start": 640.84, "duration": 4.53}, {"text": "mathematics is warm and fuzzy and cuddly", "start": 642.97, "duration": 6.09}, {"text": "just like lambdas right are both not", "start": 645.37, "duration": 6.66}, {"text": "many many years ago said if you have a", "start": 649.06, "duration": 4.74}, {"text": "problem they're susceptible to", "start": 652.03, "duration": 5.67}, {"text": "mathematics and you don't use it it is", "start": 653.8, "duration": 5.85}, {"text": "as if you were in the dark and you", "start": 657.7, "duration": 7.26}, {"text": "failed to light a candle mathematics is", "start": 659.65, "duration": 7.8}, {"text": "your friend don't be afraid of it hey", "start": 664.96, "duration": 4.83}, {"text": "you guys can all cope with JavaScript of", "start": 667.45, "duration": 3.96}, {"text": "course you can do with deal with", "start": 669.79, "duration": 5.64}, {"text": "mathematics okay", "start": 671.41, "duration": 7.2}, {"text": "so here's some Scala and what we're", "start": 675.43, "duration": 6.63}, {"text": "going to do is write out a very simple", "start": 678.61, "duration": 5.82}, {"text": "evaluator for arithmetic as a way of", "start": 682.06, "duration": 4.68}, {"text": "motivating why you might want monads and", "start": 684.43, "duration": 5.79}, {"text": "so we just have terms and the term is", "start": 686.74, "duration": 6.15}, {"text": "built in one of two ways it's either a", "start": 690.22, "duration": 5.64}, {"text": "con for constant which contains an", "start": 692.89, "duration": 6.84}, {"text": "integer or it's a div which contains two", "start": 695.86, "duration": 6.27}, {"text": "other terms so these are going to be", "start": 699.73, "duration": 4.56}, {"text": "parse trees representing arithmetic", "start": 702.13, "duration": 4.08}, {"text": "problems built solely from constants and", "start": 704.29, "duration": 5.43}, {"text": "division so for instance here's a term", "start": 706.21, "duration": 6.87}, {"text": "that represents 1932 divided by 2 and", "start": 709.72, "duration": 6.69}, {"text": "then you divide that by 23 okay and", "start": 713.08, "duration": 5.37}, {"text": "here's another term that represents 1", "start": 716.41, "duration": 6.42}, {"text": "divided by 0 nod if you're happy with", "start": 718.45, "duration": 8.73}, {"text": "that most people are not nodding I'm", "start": 722.83, "duration": 8.85}, {"text": "just going to stop right not if you are", "start": 727.18, "duration": 7.16}, {"text": "happy with that", "start": 731.68, "duration": 2.66}, {"text": "you're not nodding ask a question", "start": 735.45, "duration": 4.38}, {"text": "I'll try a third time nod if you're", "start": 740.55, "duration": 5.49}, {"text": "happy with that", "start": 743.98, "duration": 4.26}, {"text": "you're still not nodding you really", "start": 746.04, "duration": 7.33}, {"text": "better ask your question shouldn't the", "start": 748.24, "duration": 7.019}, {"text": "type system stop you from dividing by", "start": 753.37, "duration": 5.67}, {"text": "zero no so yesterday the Croft I", "start": 755.259, "duration": 7.14}, {"text": "mentioned this theorem of Robin Millers", "start": 759.04, "duration": 7.589}, {"text": "well hike programs don't go wrong but", "start": 762.399, "duration": 6.661}, {"text": "wrong has a very specific definition in", "start": 766.629, "duration": 4.5}, {"text": "the newspaper which you met forgot to", "start": 769.06, "duration": 3.959}, {"text": "mention and the specific definition", "start": 771.129, "duration": 4.621}, {"text": "basically means that something like", "start": 773.019, "duration": 6.081}, {"text": "adding a number to a string that's wrong", "start": 775.75, "duration": 6.569}, {"text": "trying to apply a number rather than", "start": 779.1, "duration": 5.89}, {"text": "apply a function that's wrong but", "start": 782.319, "duration": 4.741}, {"text": "dividing one by zero that's not wrong", "start": 784.99, "duration": 5.339}, {"text": "that's bottom so we will catch certain", "start": 787.06, "duration": 5.85}, {"text": "errors but not others so no the type", "start": 790.329, "duration": 4.021}, {"text": "system doesn't prevent you from doing", "start": 792.91, "duration": 3.84}, {"text": "every stupid thing just some stupid", "start": 794.35, "duration": 4.94}, {"text": "things excellent question thank you", "start": 796.75, "duration": 6.689}, {"text": "third time know if you're happy with", "start": 799.29, "duration": 8.409}, {"text": "that all right that's enough naught so I", "start": 803.439, "duration": 6.77}, {"text": "can move on", "start": 807.699, "duration": 2.51}, {"text": "so now we'll write a little evaluator", "start": 810.629, "duration": 5.531}, {"text": "writing it in Scala I'm not that useful", "start": 812.86, "duration": 5.31}, {"text": "Scala so you guys can correct me if I", "start": 816.16, "duration": 4.229}, {"text": "get anything wrong right so eat an", "start": 818.17, "duration": 4.83}, {"text": "evaluator takes a term and it returns an", "start": 820.389, "duration": 4.351}, {"text": "integer and we're going to match on that", "start": 823.0, "duration": 3.54}, {"text": "term and there are two possibilities", "start": 824.74, "duration": 4.17}, {"text": "right it's either a constant or division", "start": 826.54, "duration": 4.62}, {"text": "if it's a constant just return that", "start": 828.91, "duration": 4.619}, {"text": "constant if it's a division evaluate", "start": 831.16, "duration": 4.38}, {"text": "both of the sub terms and then divide", "start": 833.529, "duration": 8.16}, {"text": "the result okay pretty clear okay and", "start": 835.54, "duration": 8.159}, {"text": "then of course if we set a to the result", "start": 841.689, "duration": 4.32}, {"text": "evaluating answer that's a it always is", "start": 843.699, "duration": 4.74}, {"text": "42 you did all that bill did that", "start": 846.009, "duration": 6.0}, {"text": "division right why did I pick the 1932", "start": 848.439, "duration": 5.19}, {"text": "so starting point by the way that's the", "start": 852.009, "duration": 2.971}, {"text": "year in which lambda calculus was", "start": 853.629, "duration": 1.95}, {"text": "invented", "start": 854.98, "duration": 2.609}, {"text": "how many programming languages do you", "start": 855.579, "duration": 3.961}, {"text": "know that were invented before there", "start": 857.589, "duration": 5.761}, {"text": "were any computers lambda calculus is", "start": 859.54, "duration": 6.51}, {"text": "cool okay and then of course if we try", "start": 863.35, "duration": 5.31}, {"text": "to divide by zero then it's the computer", "start": 866.05, "duration": 5.009}, {"text": "explodes right it gives us a divided by", "start": 868.66, "duration": 3.28}, {"text": "zero error", "start": 871.059, "duration": 2.861}, {"text": "we are going to do something about that", "start": 871.94, "duration": 6.44}, {"text": "divide by zero error by the way more RAM", "start": 873.92, "duration": 7.85}, {"text": "that won't help", "start": 878.38, "duration": 3.39}, {"text": "so what are we going to do right what we", "start": 883.749, "duration": 5.32}, {"text": "want if we're trying to divide by zero", "start": 887.299, "duration": 4.08}, {"text": "we want to raise an exception so in the", "start": 889.069, "duration": 4.05}, {"text": "language with side-effects that's easy", "start": 891.379, "duration": 4.5}, {"text": "in a functional language it's also very", "start": 893.119, "duration": 5.52}, {"text": "easy all you need to do is rewrite the", "start": 895.879, "duration": 5.76}, {"text": "entire program so let's see how we would", "start": 898.639, "duration": 8.16}, {"text": "rewrite the entire program so my", "start": 901.639, "duration": 6.18}, {"text": "exception is going to be an error", "start": 906.799, "duration": 2.94}, {"text": "message let's call make let's make those", "start": 907.819, "duration": 3.87}, {"text": "strings and I'm going to find a type", "start": 909.739, "duration": 5.371}, {"text": "called M of a so it's a parameterised", "start": 911.689, "duration": 5.851}, {"text": "type the type is called m and takes a", "start": 915.11, "duration": 5.159}, {"text": "type parameter which is an a what M of a", "start": 917.54, "duration": 5.19}, {"text": "means is a computation that returns a", "start": 920.269, "duration": 8.04}, {"text": "value of type a so in our case so and", "start": 922.73, "duration": 6.839}, {"text": "what is M of a there are two", "start": 928.309, "duration": 1.981}, {"text": "possibilities", "start": 929.569, "duration": 6.0}, {"text": "it's either a raise of an exception so", "start": 930.29, "duration": 10.769}, {"text": "string or its return of an A so right if", "start": 935.569, "duration": 7.71}, {"text": "we return a value of type a we just", "start": 941.059, "duration": 4.47}, {"text": "return it and otherwise we're going to", "start": 943.279, "duration": 3.87}, {"text": "raise an exception so computation does", "start": 945.529, "duration": 4.321}, {"text": "one of two things it raises an exception", "start": 947.149, "duration": 4.711}, {"text": "that is it returns the string as an", "start": 949.85, "duration": 3.81}, {"text": "error message or it returns a value of", "start": 951.86, "duration": 4.169}, {"text": "type a so that's what M of a means in", "start": 953.66, "duration": 6.329}, {"text": "this case see it's easy you just rewrite", "start": 956.029, "duration": 7.05}, {"text": "the whole evaluator so what do we do", "start": 959.989, "duration": 5.491}, {"text": "here um I'll just point at the string", "start": 963.079, "duration": 4.38}, {"text": "rather than turning round can people see", "start": 965.48, "duration": 5.25}, {"text": "that little hand yep okay so we've got s", "start": 967.459, "duration": 5.91}, {"text": "which is a term and we match it right in", "start": 970.73, "duration": 5.269}, {"text": "the two possibility if use a con or div", "start": 973.369, "duration": 5.19}, {"text": "so if it's con of course we just return", "start": 975.999, "duration": 4.541}, {"text": "a so notice now we have to write return", "start": 978.559, "duration": 5.07}, {"text": "around a and notice that the good thing", "start": 980.54, "duration": 5.519}, {"text": "about a type system is that you just", "start": 983.629, "duration": 4.92}, {"text": "said a and you forgot the return the", "start": 986.059, "duration": 4.02}, {"text": "type system would say did you really", "start": 988.549, "duration": 4.561}, {"text": "mean that I don't think so and you'd put", "start": 990.079, "duration": 5.01}, {"text": "in the return to give it the right type", "start": 993.11, "duration": 5.339}, {"text": "which is in this case M event this works", "start": 995.089, "duration": 6.33}, {"text": "right because a is an int so otherwise", "start": 998.449, "duration": 5.43}, {"text": "it's a div of T nu and we're going to", "start": 1001.419, "duration": 5.371}, {"text": "we'll evaluate T of course T is going to", "start": 1003.879, "duration": 4.65}, {"text": "do one of two things it's either going", "start": 1006.79, "duration": 3.779}, {"text": "to give an error message if it does that", "start": 1008.529, "duration": 4.321}, {"text": "will just return that same error message", "start": 1010.569, "duration": 4.49}, {"text": "or", "start": 1012.85, "duration": 2.209}, {"text": "it's going to return some value let's", "start": 1015.1, "duration": 3.42}, {"text": "call it a and then the schools can", "start": 1016.39, "duration": 4.02}, {"text": "evaluate you and it'll do the same thing", "start": 1018.52, "duration": 3.81}, {"text": "if it gives an error message we'll", "start": 1020.41, "duration": 6.36}, {"text": "return it so I will raise it and if it", "start": 1022.33, "duration": 6.57}, {"text": "gives the value B well we'll check and", "start": 1026.77, "duration": 4.41}, {"text": "if B is 0 will give an error message", "start": 1028.9, "duration": 5.01}, {"text": "divided by 0 and otherwise we'll return", "start": 1031.18, "duration": 6.27}, {"text": "a over B so you said why doesn't the", "start": 1033.91, "duration": 5.34}, {"text": "type system get rid of you know tell me", "start": 1037.45, "duration": 3.57}, {"text": "that I'm dividing by 0 so it won't do", "start": 1039.25, "duration": 3.66}, {"text": "that but if you want to say well the", "start": 1041.02, "duration": 5.88}, {"text": "answer is either a value of type A or an", "start": 1042.91, "duration": 5.76}, {"text": "error message it will help you get that", "start": 1046.9, "duration": 6.09}, {"text": "right okay so all we had to do was", "start": 1048.67, "duration": 5.73}, {"text": "rewrite the program in this route", "start": 1052.99, "duration": 3.9}, {"text": "straight forward but revoltingly tedious", "start": 1054.4, "duration": 6.99}, {"text": "way let's try another possibility", "start": 1056.89, "duration": 6.75}, {"text": "oh no let's try it first let's just make", "start": 1061.39, "duration": 6.0}, {"text": "sure it works so let em be eval of", "start": 1063.64, "duration": 8.15}, {"text": "answer and n is going to be return of 42", "start": 1067.39, "duration": 7.56}, {"text": "but now if we do the dare err we get", "start": 1071.79, "duration": 7.96}, {"text": "raised of divided by 0 okay any", "start": 1074.95, "duration": 8.43}, {"text": "questions yet I had a question I've saw", "start": 1079.75, "duration": 5.7}, {"text": "this when I was working on it with Jed", "start": 1083.38, "duration": 4.32}, {"text": "and Toby we're very very helpful and", "start": 1085.45, "duration": 3.42}, {"text": "there will be a special thanks to them", "start": 1087.7, "duration": 3.66}, {"text": "at the end but I said why aren't there", "start": 1088.87, "duration": 3.93}, {"text": "quotation marks around four divided by", "start": 1091.36, "duration": 2.61}, {"text": "zero and they said well that's what", "start": 1092.8, "duration": 5.03}, {"text": "Scala does okay that's what scholar does", "start": 1093.97, "duration": 3.86}, {"text": "so let's look at a different thing to do", "start": 1099.81, "duration": 5.26}, {"text": "we want to count the number of division", "start": 1102.46, "duration": 5.22}, {"text": "operations so that's really easy if you", "start": 1105.07, "duration": 5.67}, {"text": "have global state you can just increment", "start": 1107.68, "duration": 4.53}, {"text": "the global state every time you do a", "start": 1110.74, "duration": 5.13}, {"text": "division operation but what if you don't", "start": 1112.21, "duration": 6.15}, {"text": "have state well that's really easy too", "start": 1115.87, "duration": 4.65}, {"text": "all we need to do is rewrite the entire", "start": 1118.36, "duration": 4.67}, {"text": "program so how are we going to do that", "start": 1120.52, "duration": 5.55}, {"text": "well now let's let's our state be an", "start": 1123.03, "duration": 4.36}, {"text": "integer the count of the number of", "start": 1126.07, "duration": 3.57}, {"text": "division operations and something of", "start": 1127.39, "duration": 6.08}, {"text": "type M of a is the computation that", "start": 1129.64, "duration": 7.35}, {"text": "updates the state and returns a value of", "start": 1133.47, "duration": 5.83}, {"text": "type a so it takes the current state as", "start": 1136.99, "duration": 5.19}, {"text": "input and it returns a pair of a the", "start": 1139.3, "duration": 6.47}, {"text": "answer whose type is a and the new state", "start": 1142.18, "duration": 6.79}, {"text": "so function from current state to", "start": 1145.77, "duration": 6.86}, {"text": "answer a new state so now eval is going", "start": 1148.97, "duration": 5.699}, {"text": "to take a term and return an M of int", "start": 1152.63, "duration": 6.84}, {"text": "and we'll match s and if it's a constant", "start": 1154.669, "duration": 7.26}, {"text": "then we don't change the state at all so", "start": 1159.47, "duration": 4.62}, {"text": "we take as input the state X and we", "start": 1161.929, "duration": 6.811}, {"text": "return an ax pair okay", "start": 1164.09, "duration": 7.62}, {"text": "take the input state return the answer", "start": 1168.74, "duration": 5.64}, {"text": "which is in this case a and return the", "start": 1171.71, "duration": 4.8}, {"text": "same state unchanged state doesn't", "start": 1174.38, "duration": 6.06}, {"text": "change no assignment okay so this arrow", "start": 1176.51, "duration": 6.18}, {"text": "here this is Scala's wave writing lambda", "start": 1180.44, "duration": 4.92}, {"text": "in lambda calculus you'd write lambda X", "start": 1182.69, "duration": 7.619}, {"text": "of type int returns and a X pair okay", "start": 1185.36, "duration": 7.049}, {"text": "not if you're happy you know what will", "start": 1190.309, "duration": 5.011}, {"text": "happen if you don't nod not if you're", "start": 1192.409, "duration": 8.581}, {"text": "happy you're not nodding ah you're", "start": 1195.32, "duration": 9.989}, {"text": "nodding imperceptibly okay we'll move on", "start": 1200.99, "duration": 6.569}, {"text": "any questions I'm not getting enough", "start": 1205.309, "duration": 4.921}, {"text": "questions here any questions okay", "start": 1207.559, "duration": 5.73}, {"text": "this is boring right it's easy to do but", "start": 1210.23, "duration": 4.59}, {"text": "it's boring it's tedious please", "start": 1213.289, "duration": 3.75}, {"text": "straightforward so if now if we're", "start": 1214.82, "duration": 4.56}, {"text": "dividing T by you we take the current", "start": 1217.039, "duration": 5.551}, {"text": "state X and eval T takes the current", "start": 1219.38, "duration": 5.64}, {"text": "state X as an additional target the", "start": 1222.59, "duration": 4.89}, {"text": "input state what will we get back and a", "start": 1225.02, "duration": 5.61}, {"text": "white air a is the answer y is the new", "start": 1227.48, "duration": 6.24}, {"text": "tape takes the new state pass that into", "start": 1230.63, "duration": 7.2}, {"text": "eval of you get out the answer B and a", "start": 1233.72, "duration": 6.54}, {"text": "final state Zed and then our final state", "start": 1237.83, "duration": 4.44}, {"text": "for the whole thing is a divided by B", "start": 1240.26, "duration": 5.909}, {"text": "that's the answer and red plus one so", "start": 1242.27, "duration": 5.7}, {"text": "now we're incrementing the current state", "start": 1246.169, "duration": 6.421}, {"text": "and then if we execute eval of answer we", "start": 1247.97, "duration": 6.209}, {"text": "have to give it the initial state zero", "start": 1252.59, "duration": 4.56}, {"text": "and it returns the final state to as", "start": 1254.179, "duration": 6.661}, {"text": "well as the answer 42 okay", "start": 1257.15, "duration": 6.84}, {"text": "not clear enough to everybody so it's", "start": 1260.84, "duration": 8.18}, {"text": "easy but very very tedious", "start": 1263.99, "duration": 5.03}, {"text": "three I want to trace the execution of", "start": 1271.83, "duration": 7.06}, {"text": "my program so again normally I would", "start": 1274.72, "duration": 5.97}, {"text": "just write some output to the terminal", "start": 1278.89, "duration": 3.899}, {"text": "but I don't have writing output as a", "start": 1280.69, "duration": 3.989}, {"text": "side-effect so what shall I do", "start": 1282.789, "duration": 4.591}, {"text": "let's I think it's pretty easy let's", "start": 1284.679, "duration": 8.691}, {"text": "just rewrite the whole program so now a", "start": 1287.38, "duration": 8.7}, {"text": "computation that returns an A is going", "start": 1293.37, "duration": 4.779}, {"text": "to return some output paired with an A", "start": 1296.08, "duration": 6.69}, {"text": "and output will just be a string and so", "start": 1298.149, "duration": 6.51}, {"text": "to evaluate something it's going to", "start": 1302.77, "duration": 4.769}, {"text": "return an output integer pair match on s", "start": 1304.659, "duration": 5.64}, {"text": "again if it's a constant then return", "start": 1307.539, "duration": 4.951}, {"text": "some output saying I just evaluated a", "start": 1310.299, "duration": 4.11}, {"text": "constant and we can do that by saying", "start": 1312.49, "duration": 5.76}, {"text": "the line takes the term s and on the", "start": 1314.409, "duration": 7.171}, {"text": "answer a and it says so line takes a", "start": 1318.25, "duration": 6.69}, {"text": "term and an integer and replaces this", "start": 1321.58, "duration": 8.339}, {"text": "term equal sign the answer new line so", "start": 1324.94, "duration": 7.68}, {"text": "we place print that line or return that", "start": 1329.919, "duration": 5.191}, {"text": "line as output and return the answer a", "start": 1332.62, "duration": 5.64}, {"text": "and if we're doing a division so X's", "start": 1335.11, "duration": 6.15}, {"text": "will evaluate T X is the output a is the", "start": 1338.26, "duration": 6.899}, {"text": "answer will evaluate you Y is the output", "start": 1341.26, "duration": 6.09}, {"text": "B is the answer and then for the final", "start": 1345.159, "duration": 3.211}, {"text": "thing we'll place", "start": 1347.35, "duration": 3.39}, {"text": "print all the output from T all the", "start": 1348.37, "duration": 6.299}, {"text": "output from you a line saying astra", "start": 1350.74, "duration": 5.7}, {"text": "number S will be dipped to you I divided", "start": 1354.669, "duration": 4.23}, {"text": "T by you and the answer was a divided by", "start": 1356.44, "duration": 5.219}, {"text": "B and I'll return the answer a divided", "start": 1358.899, "duration": 7.921}, {"text": "by B okay clear enough right so at this", "start": 1361.659, "duration": 7.591}, {"text": "point hey you should all be nodding your", "start": 1366.82, "duration": 5.79}, {"text": "heads right and B you'd all be bored", "start": 1369.25, "duration": 5.309}, {"text": "silly and see somebody's actually asking", "start": 1372.61, "duration": 5.09}, {"text": "a question thank you yes", "start": 1374.559, "duration": 8.551}, {"text": "sorry I can't hear you why are we", "start": 1377.7, "duration": 8.17}, {"text": "calculating state and output so in this", "start": 1383.11, "duration": 4.799}, {"text": "case we were doing some state because we", "start": 1385.87, "duration": 3.36}, {"text": "wanted to count the number of division", "start": 1387.909, "duration": 3.51}, {"text": "operations you might have variant", "start": 1389.23, "duration": 3.689}, {"text": "recognize take they're better ways of", "start": 1391.419, "duration": 3.421}, {"text": "doing that than counting right I could", "start": 1392.919, "duration": 4.171}, {"text": "just have every operation return the", "start": 1394.84, "duration": 4.02}, {"text": "number of operations it did and then add", "start": 1397.09, "duration": 3.329}, {"text": "them all together that would be better", "start": 1398.86, "duration": 3.24}, {"text": "but I wanted something that involves", "start": 1400.419, "duration": 4.381}, {"text": "state so I did that because you", "start": 1402.1, "duration": 4.35}, {"text": "no of many computations where you do", "start": 1404.8, "duration": 3.42}, {"text": "need to pass state around a database a", "start": 1406.45, "duration": 4.2}, {"text": "and similarly sometimes you need to", "start": 1408.22, "duration": 3.66}, {"text": "trace things so that's why I'm doing", "start": 1410.65, "duration": 2.91}, {"text": "output here but again you'll think of", "start": 1411.88, "duration": 3.39}, {"text": "many things where you need to do output", "start": 1413.56, "duration": 3.21}, {"text": "or many things where you need to raise", "start": 1415.27, "duration": 3.75}, {"text": "exceptions so I've tried to take", "start": 1416.77, "duration": 4.14}, {"text": "examples so they're simple enough that", "start": 1419.02, "duration": 4.05}, {"text": "can cover them in a one-hour talk but", "start": 1420.91, "duration": 3.72}, {"text": "you will all be able to think of many", "start": 1423.07, "duration": 3.36}, {"text": "other things like this that you want to", "start": 1424.63, "duration": 5.25}, {"text": "do and you're nodding excellent thank", "start": 1426.43, "duration": 6.9}, {"text": "you okay but the point is by now you", "start": 1429.88, "duration": 5.73}, {"text": "should be bored okay yes I can do all of", "start": 1433.33, "duration": 4.35}, {"text": "these things yes the programs are", "start": 1435.61, "duration": 3.66}, {"text": "straightforward but they are very", "start": 1437.68, "duration": 4.5}, {"text": "tedious to write all right and let's", "start": 1439.27, "duration": 5.13}, {"text": "yeah so if we do Bell is out of answer", "start": 1442.18, "duration": 3.45}, {"text": "right we get the output well first I", "start": 1444.4, "duration": 4.77}, {"text": "evaluated in 1932 to 1932 then a value", "start": 1445.63, "duration": 7.28}, {"text": "80222 9 divided in 1932 by - that was", "start": 1449.17, "duration": 7.5}, {"text": "966 and I evaluate 23 to 23 and then the", "start": 1452.91, "duration": 6.4}, {"text": "whole expression evaluates to 42 and 42", "start": 1456.67, "duration": 5.88}, {"text": "is the answer okay so straightforward", "start": 1459.31, "duration": 7.14}, {"text": "but boring and tedious so here's what", "start": 1462.55, "duration": 5.37}, {"text": "we're going to do about the boring", "start": 1466.45, "duration": 2.85}, {"text": "tedious part right you'll recognize that", "start": 1467.92, "duration": 3.0}, {"text": "that slides they have this weird", "start": 1469.3, "duration": 3.09}, {"text": "background that's from the actual", "start": 1470.92, "duration": 7.68}, {"text": "original talk so what we're going to do", "start": 1472.39, "duration": 10.32}, {"text": "is define a monad back to the dictionary", "start": 1478.6, "duration": 8.97}, {"text": "known add now 1 be in the metaphysics of", "start": 1482.71, "duration": 7.98}, {"text": "line that's a simple indestructible", "start": 1487.57, "duration": 6.48}, {"text": "non-spatial element regarded as the unit", "start": 1490.69, "duration": 7.71}, {"text": "of which reality consists ok so you're", "start": 1494.05, "duration": 7.13}, {"text": "ready to see what that is", "start": 1498.4, "duration": 6.45}, {"text": "so it's just three things and remember", "start": 1501.18, "duration": 5.53}, {"text": "category theorist has this for", "start": 1504.85, "duration": 4.5}, {"text": "completely different reasons category", "start": 1506.71, "duration": 4.17}, {"text": "theorists were interested in problems in", "start": 1509.35, "duration": 4.53}, {"text": "algebraic topology of all things but for", "start": 1510.88, "duration": 4.89}, {"text": "that they needed this kind of structure", "start": 1513.88, "duration": 5.31}, {"text": "so it has three things number one for", "start": 1515.77, "duration": 6.99}, {"text": "each type a of values a type M of a to", "start": 1519.19, "duration": 5.28}, {"text": "represent computation so you probably", "start": 1522.76, "duration": 3.93}, {"text": "figured out what the Big M stands for", "start": 1524.47, "duration": 6.03}, {"text": "and in general what we're going to do", "start": 1526.69, "duration": 6.03}, {"text": "take a function from A to B and that's", "start": 1530.5, "duration": 4.26}, {"text": "going to become a function from A to M", "start": 1532.72, "duration": 6.29}, {"text": "of B that's the key idea", "start": 1534.76, "duration": 6.72}, {"text": "right and you've seen three examples of", "start": 1539.01, "duration": 4.63}, {"text": "that where we took eval which take", "start": 1541.48, "duration": 4.05}, {"text": "determine returns an integer and we've", "start": 1543.64, "duration": 3.81}, {"text": "turned it into eval which takes a term", "start": 1545.53, "duration": 5.46}, {"text": "and returns an M of integer and n is our", "start": 1547.45, "duration": 6.0}, {"text": "computation with computational effects", "start": 1550.99, "duration": 5.97}, {"text": "such as raising exceptions changing", "start": 1553.45, "duration": 7.02}, {"text": "state or printing output okay and then", "start": 1556.96, "duration": 6.81}, {"text": "we're going to need two things to go", "start": 1560.47, "duration": 5.79}, {"text": "with this first a way to turn values", "start": 1563.77, "duration": 4.74}, {"text": "into computations we're going to call", "start": 1566.26, "duration": 5.94}, {"text": "that pure so pure takes a value a of", "start": 1568.51, "duration": 6.66}, {"text": "type a and returns a value of type M of", "start": 1572.2, "duration": 4.83}, {"text": "a so this is the computation that", "start": 1575.17, "duration": 5.19}, {"text": "returns the answer little a of type big", "start": 1577.03, "duration": 6.75}, {"text": "a without doing anything else so it", "start": 1580.36, "duration": 6.0}, {"text": "leaves the state unchanged it raises no", "start": 1583.78, "duration": 6.08}, {"text": "exception or it prints no output and", "start": 1586.36, "duration": 5.81}, {"text": "then we need a way to combine", "start": 1589.86, "duration": 5.56}, {"text": "computations this is called bind and", "start": 1592.17, "duration": 6.1}, {"text": "this is the weird one so barn takes a", "start": 1595.42, "duration": 5.31}, {"text": "computation M that returns a value of", "start": 1598.27, "duration": 4.98}, {"text": "type a and now we want to do something", "start": 1600.73, "duration": 5.94}, {"text": "with that value of type a okay but we've", "start": 1603.25, "duration": 6.81}, {"text": "got something a type M of a and what we", "start": 1606.67, "duration": 4.38}, {"text": "want is something that does something", "start": 1610.06, "duration": 3.03}, {"text": "with V a so that's something that does", "start": 1611.05, "duration": 6.69}, {"text": "something with VA is called K which in", "start": 1613.09, "duration": 6.87}, {"text": "fact think of continuation that's why we", "start": 1617.74, "duration": 5.31}, {"text": "use K and the rest of the computation", "start": 1619.96, "duration": 6.69}, {"text": "the continuation takes the value a so", "start": 1623.05, "duration": 6.12}, {"text": "this is an a not an M of a and it", "start": 1626.65, "duration": 4.65}, {"text": "returns the computation of type B then", "start": 1629.17, "duration": 3.54}, {"text": "we put those together and the whole", "start": 1631.3, "duration": 5.58}, {"text": "thing is a computation of type B so in", "start": 1632.71, "duration": 6.42}, {"text": "language with side-effects this is just", "start": 1636.88, "duration": 7.2}, {"text": "a let expression evaluate m and then if", "start": 1639.13, "duration": 8.34}, {"text": "we wrote K is lambda X and it means bind", "start": 1644.08, "duration": 6.57}, {"text": "X to the value returned by M and then do", "start": 1647.47, "duration": 7.46}, {"text": "n so this would be let X equal m in N if", "start": 1650.65, "duration": 7.35}, {"text": "K was lambda X and then some expression", "start": 1654.93, "duration": 5.11}, {"text": "man so we'll see lots of examples", "start": 1658.0, "duration": 4.52}, {"text": "question", "start": 1660.04, "duration": 2.48}, {"text": "do I have a typo oh yeah there is a typo", "start": 1666.41, "duration": 12.04}, {"text": "thank you hey guys right so Toby we're", "start": 1673.38, "duration": 6.69}, {"text": "helping we do this and we must have it's", "start": 1678.45, "duration": 3.57}, {"text": "all running you can actually download it", "start": 1680.07, "duration": 3.6}, {"text": "from the web so we must have made an", "start": 1682.02, "duration": 3.18}, {"text": "error in typesetting it so this is", "start": 1683.67, "duration": 4.11}, {"text": "actually find of a comma B because both", "start": 1685.2, "duration": 5.58}, {"text": "a and B are types used by this thing and", "start": 1687.78, "duration": 5.91}, {"text": "the type inference system of Scala will", "start": 1690.78, "duration": 5.22}, {"text": "just infer a and B for you so we won't", "start": 1693.69, "duration": 7.02}, {"text": "need to write those all the time okay", "start": 1696.0, "duration": 7.14}, {"text": "and then these satisfy some laws this is", "start": 1700.71, "duration": 4.02}, {"text": "the only mathematics you'll see in the", "start": 1703.14, "duration": 4.38}, {"text": "talk and I'm not even going to go", "start": 1704.73, "duration": 4.26}, {"text": "through the details of how these work", "start": 1707.52, "duration": 4.05}, {"text": "but you're guaranteed that these if you", "start": 1708.99, "duration": 4.5}, {"text": "ever write that expression it's the same", "start": 1711.57, "duration": 3.57}, {"text": "as that one if you ever write that", "start": 1713.49, "duration": 3.57}, {"text": "expression it's the same as that one if", "start": 1715.14, "duration": 3.87}, {"text": "you ever write that expression it's the", "start": 1717.06, "duration": 4.5}, {"text": "same as that one and these happen to", "start": 1719.01, "duration": 5.79}, {"text": "look like the left unit right unit and", "start": 1721.56, "duration": 5.94}, {"text": "associative laws of a mono IDE okay", "start": 1724.8, "duration": 5.19}, {"text": "there's a scary word mono a it's the", "start": 1727.5, "duration": 4.95}, {"text": "name in mathematics for an operator and", "start": 1729.99, "duration": 5.94}, {"text": "a constant such that the constant is the", "start": 1732.45, "duration": 7.14}, {"text": "unit of the operator and the operator is", "start": 1735.93, "duration": 8.97}, {"text": "associative examples 0 and plus 1 and", "start": 1739.59, "duration": 13.89}, {"text": "times true and and false and or empty", "start": 1744.9, "duration": 10.92}, {"text": "string and string concatenation those", "start": 1753.48, "duration": 4.92}, {"text": "are all examples of mono 'its so if you", "start": 1755.82, "duration": 4.29}, {"text": "want to know where the name monad comes", "start": 1758.4, "duration": 5.1}, {"text": "from it's just a pun on mono I'd write", "start": 1760.11, "duration": 5.58}, {"text": "and category theorist or pretentious so", "start": 1763.5, "duration": 3.96}, {"text": "they like to adopt names from philosophy", "start": 1765.69, "duration": 4.5}, {"text": "which is why they use likenesses term", "start": 1767.46, "duration": 5.67}, {"text": "also used by other philosophers of monad", "start": 1770.19, "duration": 6.36}, {"text": "ok so now it's demystified where it", "start": 1773.13, "duration": 5.72}, {"text": "comes from", "start": 1776.55, "duration": 2.3}, {"text": "ok so now here's the payoff what happens", "start": 1779.6, "duration": 7.12}, {"text": "to our evaluator well we need more of", "start": 1783.78, "duration": 4.37}, {"text": "the definition of blown-out of course", "start": 1786.72, "duration": 5.49}, {"text": "monad noun 1 see in the pantheistic", "start": 1788.15, "duration": 6.96}, {"text": "philosophy of Giordano Bruno a", "start": 1792.21, "duration": 4.56}, {"text": "fundamental benefits", "start": 1795.11, "duration": 5.01}, {"text": "unit they did spatially extended and", "start": 1796.77, "duration": 9.24}, {"text": "psychically aware alright so what can we", "start": 1800.12, "duration": 10.3}, {"text": "do with our psychically aware monads so", "start": 1806.01, "duration": 6.12}, {"text": "will now go through and redo our", "start": 1810.42, "duration": 4.65}, {"text": "examples and see what had been tedious", "start": 1812.13, "duration": 6.0}, {"text": "and annoying becomes straightforward by", "start": 1815.07, "duration": 8.79}, {"text": "using a monad so first let's just look", "start": 1818.13, "duration": 7.62}, {"text": "at the simplest monads the one that does", "start": 1823.86, "duration": 6.14}, {"text": "nothing whatsoever the identity monad so", "start": 1825.75, "duration": 7.08}, {"text": "we'll just define an of a to be a a", "start": 1830.0, "duration": 4.929}, {"text": "computation that returns an a is just", "start": 1832.83, "duration": 4.26}, {"text": "the value of type a and nothing else", "start": 1834.929, "duration": 4.831}, {"text": "so what's pure do it does nothing it", "start": 1837.09, "duration": 4.98}, {"text": "just returns the a and what does bind do", "start": 1839.76, "duration": 4.56}, {"text": "well we're taking the same feeding it", "start": 1842.07, "duration": 3.75}, {"text": "indicate how will we do that", "start": 1844.32, "duration": 7.59}, {"text": "just apply k to a and then we can", "start": 1845.82, "duration": 9.87}, {"text": "rewrite our evaluator in this style so", "start": 1851.91, "duration": 5.91}, {"text": "again look at the term if it's a", "start": 1855.69, "duration": 4.619}, {"text": "constant now we need to return an M of a", "start": 1857.82, "duration": 7.44}, {"text": "so return pure of a right to bit as long", "start": 1860.309, "duration": 6.781}, {"text": "as you have any this works in any monad", "start": 1865.26, "duration": 3.9}, {"text": "whatsoever this works in the identity", "start": 1867.09, "duration": 3.93}, {"text": "monad and all the other monads that", "start": 1869.16, "duration": 3.87}, {"text": "we'll see so the point is we've now", "start": 1871.02, "duration": 4.409}, {"text": "generalize so that this piece of code", "start": 1873.03, "duration": 4.67}, {"text": "works for any kind of computation", "start": 1875.429, "duration": 5.341}, {"text": "whatsoever as long as it has a pure", "start": 1877.7, "duration": 5.59}, {"text": "operation and a bind operation and by", "start": 1880.77, "duration": 4.83}, {"text": "the way you can test those three laws to", "start": 1883.29, "duration": 4.889}, {"text": "see to have a sensible pure and bind", "start": 1885.6, "duration": 6.63}, {"text": "operation so if it's a constant do", "start": 1888.179, "duration": 9.571}, {"text": "nothing just return a so pure of a if", "start": 1892.23, "duration": 9.27}, {"text": "it's a division evaluate T this will be", "start": 1897.75, "duration": 7.95}, {"text": "an M of int and we want the integer a so", "start": 1901.5, "duration": 8.76}, {"text": "bind a to the answer from eval of T and", "start": 1905.7, "duration": 6.99}, {"text": "then evaluate you and bind B to the", "start": 1910.26, "duration": 5.52}, {"text": "answer of eval of you and then just", "start": 1912.69, "duration": 5.16}, {"text": "divide a by B and return to this pure", "start": 1915.78, "duration": 4.86}, {"text": "here is where types really get to be", "start": 1917.85, "duration": 5.94}, {"text": "your friend say that I omitted one of", "start": 1920.64, "duration": 6.15}, {"text": "those binds by mistake and just said let", "start": 1923.79, "duration": 6.45}, {"text": "a be the answer of this or or I admit", "start": 1926.79, "duration": 3.99}, {"text": "both", "start": 1930.24, "duration": 2.49}, {"text": "or I omitted the pure by mistake the", "start": 1930.78, "duration": 4.47}, {"text": "type checker will tell you this is", "start": 1932.73, "duration": 5.43}, {"text": "pretty much the only program that has", "start": 1935.25, "duration": 6.15}, {"text": "the right type right as long as we're", "start": 1938.16, "duration": 5.55}, {"text": "actually evaluating P evaluating you and", "start": 1941.4, "duration": 4.92}, {"text": "dividing the answers so the types get", "start": 1943.71, "duration": 4.35}, {"text": "all the mess of passing the monads", "start": 1946.32, "duration": 5.06}, {"text": "around they force you to get that right", "start": 1948.06, "duration": 5.55}, {"text": "right you could do something wrong you", "start": 1951.38, "duration": 5.8}, {"text": "can divide B by a instead of a by B but", "start": 1953.61, "duration": 6.21}, {"text": "the types force you to get the structure", "start": 1957.18, "duration": 5.37}, {"text": "of passing things around correct that is", "start": 1959.82, "duration": 8.64}, {"text": "where the types really help so now how", "start": 1962.55, "duration": 8.43}, {"text": "would we do exceptions so as before", "start": 1968.46, "duration": 5.79}, {"text": "we'll define M of a to be raised or", "start": 1970.98, "duration": 7.4}, {"text": "return and then pure is just return and", "start": 1974.25, "duration": 8.25}, {"text": "bind says well if we've gotten an ammo", "start": 1978.38, "duration": 7.39}, {"text": "type big M of a so we'll match it if", "start": 1982.5, "duration": 5.73}, {"text": "it's raised of e than just raising again", "start": 1985.77, "duration": 8.88}, {"text": "if it's return of a then we need to pass", "start": 1988.23, "duration": 8.51}, {"text": "this a in to the subsequent computation", "start": 1994.65, "duration": 4.71}, {"text": "which will return an M of B and that'll", "start": 1996.74, "duration": 4.03}, {"text": "be the type returned by the whole thing", "start": 1999.36, "duration": 4.5}, {"text": "so just apply K to a just as in the", "start": 2000.77, "duration": 8.25}, {"text": "identity mount app again this is pretty", "start": 2003.86, "duration": 7.77}, {"text": "much the only thing that has if you've", "start": 2009.02, "duration": 5.28}, {"text": "got that type and you know how M of a is", "start": 2011.63, "duration": 4.98}, {"text": "defined that's the only thing that has", "start": 2014.3, "duration": 5.28}, {"text": "that type Leonard Alderson has actually", "start": 2016.61, "duration": 5.13}, {"text": "written a program that given types gives", "start": 2019.58, "duration": 4.17}, {"text": "terms of that type it will return this", "start": 2021.74, "duration": 4.85}, {"text": "term so the type tells you what to do", "start": 2023.75, "duration": 5.4}, {"text": "and then finally there's one more thing", "start": 2026.59, "duration": 4.18}, {"text": "we need like you can think of this as an", "start": 2029.15, "duration": 5.13}, {"text": "abstract data type now and it's a monad", "start": 2030.77, "duration": 6.18}, {"text": "so it's got pure and vine and two monads", "start": 2034.28, "duration": 4.59}, {"text": "that can raise exceptions so it also has", "start": 2036.95, "duration": 6.06}, {"text": "a raise operator and what raise does is", "start": 2038.87, "duration": 5.64}, {"text": "of course given a string it just", "start": 2043.01, "duration": 3.78}, {"text": "returned so little our arrays just", "start": 2044.51, "duration": 6.03}, {"text": "invokes big are raised and that's all we", "start": 2046.79, "duration": 6.57}, {"text": "need like go back this is exactly the", "start": 2050.54, "duration": 5.16}, {"text": "same evaluator that we had before we", "start": 2053.36, "duration": 5.16}, {"text": "only need to change one bit which is", "start": 2055.7, "duration": 5.04}, {"text": "we've changed the answer before which is", "start": 2058.52, "duration": 4.77}, {"text": "pure of a divided by B but now it's if", "start": 2060.74, "duration": 3.09}, {"text": "the", "start": 2063.29, "duration": 4.11}, {"text": "zero raise / zero otherwise pure of a", "start": 2063.83, "duration": 6.54}, {"text": "divided by B and the rest is exactly the", "start": 2067.4, "duration": 5.19}, {"text": "same as before so now instead of having", "start": 2070.37, "duration": 5.1}, {"text": "to completely rewrite our evaluator we", "start": 2072.59, "duration": 6.65}, {"text": "just add the stuff we want", "start": 2075.47, "duration": 3.77}, {"text": "how about state again M of a is defined", "start": 2080.62, "duration": 7.81}, {"text": "as before it takes the old state and it", "start": 2084.89, "duration": 6.9}, {"text": "returns a value of type a paired with", "start": 2088.43, "duration": 6.45}, {"text": "the new state so pure does no", "start": 2091.79, "duration": 5.13}, {"text": "computation it just returns a value type", "start": 2094.88, "duration": 4.44}, {"text": "a so it takes the state and returns a", "start": 2096.92, "duration": 6.75}, {"text": "paired with the same state and that's", "start": 2099.32, "duration": 5.61}, {"text": "too hard to look at I'm going to do it", "start": 2103.67, "duration": 7.11}, {"text": "here and then bind it's going to return", "start": 2104.93, "duration": 8.25}, {"text": "in MFE so this must be something that", "start": 2110.78, "duration": 4.74}, {"text": "takes the initial state and returns B", "start": 2113.18, "duration": 4.77}, {"text": "and the new state so there's X that's", "start": 2115.52, "duration": 5.67}, {"text": "the initial State evaluate M applied to", "start": 2117.95, "duration": 5.88}, {"text": "X so we passed the old state into M we", "start": 2121.19, "duration": 4.85}, {"text": "get out the answer a and the new state Y", "start": 2123.83, "duration": 7.26}, {"text": "pass up like a to a that's the type M of", "start": 2126.04, "duration": 7.96}, {"text": "B is then expect the current state which", "start": 2131.09, "duration": 5.94}, {"text": "in this case will be Y and we get out", "start": 2134.0, "duration": 5.37}, {"text": "the final answer B paragraph said and", "start": 2137.03, "duration": 4.83}, {"text": "then we return a B's that pair notice I", "start": 2139.37, "duration": 3.81}, {"text": "could have written this more concisely", "start": 2141.86, "duration": 5.1}, {"text": "as just fell a y equals M of B and then", "start": 2143.18, "duration": 7.64}, {"text": "return K of a applied to Y and then", "start": 2146.96, "duration": 6.09}, {"text": "we'll need one more thing in this case", "start": 2150.82, "duration": 5.8}, {"text": "tik tik returns M of unit unit is the", "start": 2153.05, "duration": 5.49}, {"text": "type that has no interesting values in", "start": 2156.62, "duration": 3.51}, {"text": "it so the one uninteresting value of", "start": 2158.54, "duration": 3.96}, {"text": "type unit is written as the empty tuple", "start": 2160.13, "duration": 4.86}, {"text": "open parentheses close parentheses and M", "start": 2162.5, "duration": 6.3}, {"text": "of unit takes the input state returns no", "start": 2164.99, "duration": 5.73}, {"text": "interesting value and increments the", "start": 2168.8, "duration": 4.08}, {"text": "state by 1 so this is what changes the", "start": 2170.72, "duration": 5.88}, {"text": "state tik and in general for state monad", "start": 2172.88, "duration": 5.49}, {"text": "you might have an operation here that", "start": 2176.6, "duration": 3.45}, {"text": "changes the state however you want might", "start": 2178.37, "duration": 3.9}, {"text": "have get and set operations on the state", "start": 2180.05, "duration": 6.06}, {"text": "and then our dilator is just the same as", "start": 2182.27, "duration": 6.42}, {"text": "before we just change one line we put in", "start": 2186.11, "duration": 6.63}, {"text": "a tick before doing the division so now", "start": 2188.69, "duration": 5.52}, {"text": "we will count the number of division", "start": 2192.74, "duration": 3.62}, {"text": "operations", "start": 2194.21, "duration": 4.85}, {"text": "and write this program essentially is", "start": 2196.36, "duration": 4.98}, {"text": "just the one we saw before but we don't", "start": 2199.06, "duration": 4.19}, {"text": "need to rewrite everything tediously", "start": 2201.34, "duration": 4.5}, {"text": "like this is just the one we saw before", "start": 2203.25, "duration": 4.54}, {"text": "after you expand out all the binds and", "start": 2205.84, "duration": 4.05}, {"text": "the peers but you don't need to rewrite", "start": 2207.79, "duration": 5.49}, {"text": "everything tediously and finally for", "start": 2209.89, "duration": 7.14}, {"text": "output so MFA is now the output paired", "start": 2213.28, "duration": 6.57}, {"text": "with a pure obey is going to return an a", "start": 2217.03, "duration": 5.13}, {"text": "and no output so it's no output paired", "start": 2219.85, "duration": 5.48}, {"text": "with a bind", "start": 2222.16, "duration": 7.44}, {"text": "take some and add a decay again and what", "start": 2225.33, "duration": 5.95}, {"text": "are we going to do well M is going to", "start": 2229.6, "duration": 5.25}, {"text": "return output X and answer a we take K", "start": 2231.28, "duration": 6.15}, {"text": "apply to the answer a it will return", "start": 2234.85, "duration": 5.61}, {"text": "output Y and answer B and then we return", "start": 2237.43, "duration": 7.55}, {"text": "the append of x and y and the answer B", "start": 2240.46, "duration": 6.93}, {"text": "then we need one more operation again", "start": 2244.98, "duration": 5.98}, {"text": "output that takes a string and of course", "start": 2247.39, "duration": 5.94}, {"text": "it returns the string paired with a", "start": 2250.96, "duration": 4.62}, {"text": "value that's not of interest so it's an", "start": 2253.33, "duration": 7.08}, {"text": "M of unit any questions is that clear", "start": 2255.58, "duration": 5.07}, {"text": "enough", "start": 2260.41, "duration": 4.49}, {"text": "and again our program is just as before", "start": 2260.65, "duration": 6.42}, {"text": "except now we've got one more operation", "start": 2264.9, "duration": 4.69}, {"text": "we do an output of line si before", "start": 2267.07, "duration": 5.16}, {"text": "returning pure of a for con and we do an", "start": 2269.59, "duration": 4.95}, {"text": "output of line s and a divided by B", "start": 2272.23, "duration": 5.48}, {"text": "before returning pure of a and B and", "start": 2274.54, "duration": 5.82}, {"text": "again this simplifies just to what we", "start": 2277.71, "duration": 10.33}, {"text": "saw before that is it you are now expert", "start": 2280.36, "duration": 14.18}, {"text": "at monads any questions yes", "start": 2288.04, "duration": 6.5}, {"text": "am i implying that monads are exciting", "start": 2299.42, "duration": 6.669}, {"text": "because they give state output and", "start": 2303.18, "duration": 4.549}, {"text": "exceptions to functional languages", "start": 2306.089, "duration": 5.16}, {"text": "absolutely question the answer is sort", "start": 2307.729, "duration": 7.75}, {"text": "of yes they are exciting because they", "start": 2311.249, "duration": 6.48}, {"text": "give you those three things but they", "start": 2315.479, "duration": 4.951}, {"text": "also give you pretty much anything else", "start": 2317.729, "duration": 4.431}, {"text": "you can imagine", "start": 2320.43, "duration": 4.559}, {"text": "so in a language with side effects you", "start": 2322.16, "duration": 4.809}, {"text": "are limited to the side effects built", "start": 2324.989, "duration": 4.891}, {"text": "into the language but you can define a", "start": 2326.969, "duration": 5.55}, {"text": "monad for any of these three effects and", "start": 2329.88, "duration": 6.06}, {"text": "many many many others so you can have", "start": 2332.519, "duration": 5.79}, {"text": "monads to melt Matt to deal with", "start": 2335.94, "duration": 6.559}, {"text": "multiple answers lists of answers", "start": 2338.309, "duration": 7.41}, {"text": "streams of answers you have monads to", "start": 2342.499, "duration": 5.5}, {"text": "deal with concurrency so I'm not going", "start": 2345.719, "duration": 3.661}, {"text": "to go into all the different kinds of", "start": 2347.999, "duration": 3.391}, {"text": "images you can have you have monads to", "start": 2349.38, "duration": 4.649}, {"text": "deal with probability so you label each", "start": 2351.39, "duration": 5.31}, {"text": "answer with how likely it is so there", "start": 2354.029, "duration": 4.44}, {"text": "are all sorts of different things that", "start": 2356.7, "duration": 3.75}, {"text": "fall out of this among which are", "start": 2358.469, "duration": 5.3}, {"text": "included exceptions state and output", "start": 2360.45, "duration": 5.43}, {"text": "suggesting you to do exception state an", "start": 2363.769, "duration": 4.0}, {"text": "output that would be pretty cool but in", "start": 2365.88, "duration": 5.25}, {"text": "fact we can do so much more we can do a", "start": 2367.769, "duration": 5.49}, {"text": "huge variety of things and when I first", "start": 2371.13, "duration": 4.649}, {"text": "bumped in to monads I thought well gosh", "start": 2373.259, "duration": 4.171}, {"text": "it looks like you can do everything with", "start": 2375.779, "duration": 4.74}, {"text": "these why is that eventually we've found", "start": 2377.43, "duration": 4.5}, {"text": "some things that weren't lowness but a", "start": 2380.519, "duration": 3.871}, {"text": "huge variety of things can be done with", "start": 2381.93, "duration": 4.76}, {"text": "these and that's why they're so helpful", "start": 2384.39, "duration": 5.3}, {"text": "yes", "start": 2386.69, "duration": 3.0}, {"text": "couldn't you just hide monads under the", "start": 2391.039, "duration": 4.601}, {"text": "covers and have a normal language well", "start": 2393.39, "duration": 4.139}, {"text": "it's really helpful to know where you", "start": 2395.64, "duration": 3.719}, {"text": "have effects and where you don't and", "start": 2397.529, "duration": 4.26}, {"text": "that's why it's very useful but in fact", "start": 2399.359, "duration": 5.01}, {"text": "indeed it's a current active area of", "start": 2401.789, "duration": 4.591}, {"text": "research how do you build the monads", "start": 2404.369, "duration": 5.19}, {"text": "into the language and in fact remember I", "start": 2406.38, "duration": 5.099}, {"text": "said look what's awful about this is you", "start": 2409.559, "duration": 3.78}, {"text": "have to rewrite the whole program and", "start": 2411.479, "duration": 3.63}, {"text": "what's great about monads is you don't", "start": 2413.339, "duration": 3.66}, {"text": "but notice that when you move from not", "start": 2415.109, "duration": 3.66}, {"text": "being in a monad to being in a monad", "start": 2416.999, "duration": 4.26}, {"text": "then you do so once you have to rewrite", "start": 2418.769, "duration": 4.23}, {"text": "the whole program into tedious but", "start": 2421.259, "duration": 3.72}, {"text": "straightforward way and after that you", "start": 2422.999, "duration": 4.171}, {"text": "don't maybe the language could do that", "start": 2424.979, "duration": 4.02}, {"text": "rewriting force itself if we're in a", "start": 2427.17, "duration": 2.78}, {"text": "monad or not", "start": 2428.999, "duration": 3.141}, {"text": "so in fact there's that's an active", "start": 2429.95, "duration": 4.26}, {"text": "subject of research but it's not made it", "start": 2432.14, "duration": 4.07}, {"text": "into mainstream languages yet", "start": 2434.21, "duration": 5.159}, {"text": "good question thank you question at the", "start": 2436.21, "duration": 5.339}, {"text": "back", "start": 2439.369, "duration": 2.18}, {"text": "okay so the question was state and", "start": 2461.54, "duration": 7.87}, {"text": "output look very similar and I think", "start": 2466.04, "duration": 6.01}, {"text": "you're sort of noticing that if you", "start": 2469.41, "duration": 4.86}, {"text": "never use the IMP if you just use the", "start": 2472.05, "duration": 4.2}, {"text": "output operation go to current state", "start": 2474.27, "duration": 4.2}, {"text": "that comes in and you ignore it and you", "start": 2476.25, "duration": 4.59}, {"text": "send it to what sorry you take it and", "start": 2478.47, "duration": 3.9}, {"text": "you append to it what you want", "start": 2480.84, "duration": 3.69}, {"text": "so just appending things to the output", "start": 2482.37, "duration": 3.87}, {"text": "all of it to the current state all the", "start": 2484.53, "duration": 3.93}, {"text": "time that is just like output so you", "start": 2486.24, "duration": 4.38}, {"text": "could actually define output on top of", "start": 2488.46, "duration": 5.04}, {"text": "state that is true I just want to give", "start": 2490.62, "duration": 5.55}, {"text": "you three examples of a monad and in", "start": 2493.5, "duration": 5.37}, {"text": "fact when you define output the way it's", "start": 2496.17, "duration": 4.41}, {"text": "done you can see the two computations", "start": 2498.87, "duration": 3.48}, {"text": "are independent you could do them in", "start": 2500.58, "duration": 3.9}, {"text": "either order as long as you print the", "start": 2502.35, "duration": 3.48}, {"text": "output of the first one before the", "start": 2504.48, "duration": 3.15}, {"text": "output of the second one so there's less", "start": 2505.83, "duration": 4.83}, {"text": "time dependence and it's easy easier to", "start": 2507.63, "duration": 5.43}, {"text": "make parallel the stuff with output than", "start": 2510.66, "duration": 4.26}, {"text": "the stuff with state so that's one", "start": 2513.06, "duration": 3.15}, {"text": "reason why you might want to use output", "start": 2514.92, "duration": 3.9}, {"text": "rather than state because it's easier to", "start": 2516.21, "duration": 4.44}, {"text": "see the stuff works in parallel that", "start": 2518.82, "duration": 3.3}, {"text": "there's no dependence between the two", "start": 2520.65, "duration": 4.02}, {"text": "parts excellent question", "start": 2522.12, "duration": 6.0}, {"text": "thank you so I said you could use monads", "start": 2524.67, "duration": 5.85}, {"text": "to do so much more I'm at the end of my", "start": 2528.12, "duration": 4.29}, {"text": "time so I'm just going to wave this in", "start": 2530.52, "duration": 3.33}, {"text": "front of you and saying among other", "start": 2532.41, "duration": 3.44}, {"text": "things you can do lists and streams and", "start": 2533.85, "duration": 4.74}, {"text": "so bind is just the thing you need if", "start": 2535.85, "duration": 3.79}, {"text": "you want something like Cartesian", "start": 2538.59, "duration": 3.51}, {"text": "products so here MFA needs a list or a", "start": 2539.64, "duration": 5.46}, {"text": "stream of a and Emma fee is the same and", "start": 2542.1, "duration": 5.97}, {"text": "we want to return a list or stream of Av", "start": 2545.1, "duration": 7.02}, {"text": "pairs so we just bind em to a and bind n", "start": 2548.07, "duration": 7.53}, {"text": "to be and pure an a/v pair and by the", "start": 2552.12, "duration": 6.24}, {"text": "way that's just like a for loop for each", "start": 2555.6, "duration": 5.4}, {"text": "a drone from M and each be drawn from n", "start": 2558.36, "duration": 9.75}, {"text": "yield a paired with B and Scala supports", "start": 2561.0, "duration": 10.08}, {"text": "the special for syntax for dealing with", "start": 2568.11, "duration": 4.83}, {"text": "lists or streams or other collections", "start": 2571.08, "duration": 4.71}, {"text": "and it is just a monad it's built on top", "start": 2572.94, "duration": 5.49}, {"text": "of monads and that means the same for", "start": 2575.79, "duration": 4.5}, {"text": "yield notation we could have used it to", "start": 2578.43, "duration": 4.23}, {"text": "rewrite all the evaluators I showed you", "start": 2580.29, "duration": 5.37}, {"text": "so instead of saying you know following", "start": 2582.66, "duration": 6.93}, {"text": "eval of whatever to a da da we could", "start": 2585.66, "duration": 4.5}, {"text": "just say", "start": 2589.59, "duration": 4.86}, {"text": "for a drawing from em okay so there's", "start": 2590.16, "duration": 7.619}, {"text": "nice syntax that supports monads and", "start": 2594.45, "duration": 5.01}, {"text": "they are useful for all sorts of things", "start": 2597.779, "duration": 4.441}, {"text": "including pretty much the most important", "start": 2599.46, "duration": 7.26}, {"text": "data structure in the world the list not", "start": 2602.22, "duration": 5.76}, {"text": "to mention it works just the same with", "start": 2606.72, "duration": 3.27}, {"text": "the second most important data structure", "start": 2607.98, "duration": 6.69}, {"text": "in the world the stream so let's", "start": 2609.99, "duration": 6.99}, {"text": "conclude we're on to the second part of", "start": 2614.67, "duration": 4.74}, {"text": "the definition of bone app monad noun to", "start": 2616.98, "duration": 5.73}, {"text": "our single-celled organism especially a", "start": 2619.41, "duration": 8.099}, {"text": "flageolet protozoan so we actually use", "start": 2622.71, "duration": 7.71}, {"text": "monads in the Haskell compiler so the", "start": 2627.509, "duration": 4.921}, {"text": "very first Haskell compiler was written", "start": 2630.42, "duration": 4.47}, {"text": "in Haskell and each baised used a monad", "start": 2632.43, "duration": 5.609}, {"text": "so the type inference phase had a monad", "start": 2634.89, "duration": 5.04}, {"text": "that dealt with exceptions and state and", "start": 2638.039, "duration": 5.28}, {"text": "read only state so output is sort of", "start": 2639.93, "duration": 5.429}, {"text": "write only state", "start": 2643.319, "duration": 4.29}, {"text": "you also need read only say first things", "start": 2645.359, "duration": 3.601}, {"text": "like your current location at which you", "start": 2647.609, "duration": 3.45}, {"text": "want to report an error so for each", "start": 2648.96, "duration": 4.53}, {"text": "phase of the compiler there was an", "start": 2651.059, "duration": 4.74}, {"text": "appropriate monad to use and if you", "start": 2653.49, "duration": 4.41}, {"text": "decided you needed more stuff it was", "start": 2655.799, "duration": 4.201}, {"text": "easy to change the Mon app so this", "start": 2657.9, "duration": 4.83}, {"text": "actually worked in practice and my first", "start": 2660.0, "duration": 4.71}, {"text": "day to talk this was the only evidence I", "start": 2662.73, "duration": 4.5}, {"text": "had that monads were a good idea and now", "start": 2664.71, "duration": 4.109}, {"text": "people have used it in many many many", "start": 2667.23, "duration": 3.18}, {"text": "ways and there's a little bit more", "start": 2668.819, "duration": 5.371}, {"text": "evidence that they're a good idea so as", "start": 2670.41, "duration": 7.26}, {"text": "was mentioned they're not my idea the", "start": 2674.19, "duration": 7.53}, {"text": "Eugenio Margie's idea he wrote a paper", "start": 2677.67, "duration": 6.899}, {"text": "in 1989 he was interested in", "start": 2681.72, "duration": 4.649}, {"text": "denotational semantics of programming", "start": 2684.569, "duration": 4.47}, {"text": "languages a bit of mathematical theory", "start": 2686.369, "duration": 4.47}, {"text": "and he noticed that when you do", "start": 2689.039, "duration": 3.931}, {"text": "denotational semantics of things like", "start": 2690.839, "duration": 5.101}, {"text": "exception state and output you had to", "start": 2692.97, "duration": 5.16}, {"text": "tediously rewrite the entire semantics", "start": 2695.94, "duration": 4.139}, {"text": "and that monads gave a nice way of", "start": 2698.13, "duration": 3.75}, {"text": "structuring things so you didn't need to", "start": 2700.079, "duration": 4.351}, {"text": "do that and I read his paper I thought", "start": 2701.88, "duration": 6.12}, {"text": "hey that will probably work for writing", "start": 2704.43, "duration": 5.97}, {"text": "programs as well so that was my", "start": 2708.0, "duration": 4.92}, {"text": "contribution was to take this theory", "start": 2710.4, "duration": 4.59}, {"text": "done by a true category theorist Eugenio", "start": 2712.92, "duration": 5.07}, {"text": "and explain it to haskell hackers and", "start": 2714.99, "duration": 5.039}, {"text": "then from there it got out into all", "start": 2717.99, "duration": 4.879}, {"text": "these other languages", "start": 2720.029, "duration": 2.84}, {"text": "by the way Michael Spivey had also", "start": 2723.21, "duration": 4.62}, {"text": "noticed the utility of monads for", "start": 2726.21, "duration": 3.66}, {"text": "exception handling although he didn't", "start": 2727.83, "duration": 3.87}, {"text": "notice its utility for anything else and", "start": 2729.87, "duration": 5.85}, {"text": "ten years earlier John Reynolds in the", "start": 2731.7, "duration": 5.67}, {"text": "paper called the essence of elavil had", "start": 2735.72, "duration": 3.48}, {"text": "come up with this idea of separating the", "start": 2737.37, "duration": 4.71}, {"text": "type int and the type M event oh yes mo", "start": 2739.2, "duration": 4.74}, {"text": "jennie-o did mathematics so it wasn't", "start": 2742.08, "duration": 5.52}, {"text": "called damn it was called T yes that", "start": 2743.94, "duration": 5.61}, {"text": "really is how big the difference between", "start": 2747.6, "duration": 8.04}, {"text": "mathematics and programming is so John", "start": 2749.55, "duration": 9.18}, {"text": "Reynolds had this idea of a cut of data", "start": 2755.64, "duration": 5.79}, {"text": "types and what he called phrase types so", "start": 2758.73, "duration": 4.11}, {"text": "these are what we've been calling values", "start": 2761.43, "duration": 3.99}, {"text": "and computations and he had the same", "start": 2762.84, "duration": 6.51}, {"text": "idea that into X sorry into int in this", "start": 2765.42, "duration": 7.62}, {"text": "case would become int 2 into X but he", "start": 2769.35, "duration": 5.37}, {"text": "didn't have these idea of what we've", "start": 2773.04, "duration": 7.35}, {"text": "been calling pure and bind we're out of", "start": 2774.72, "duration": 7.41}, {"text": "definitions of monad we're on to the", "start": 2780.39, "duration": 3.6}, {"text": "next word in the dictionary which is", "start": 2782.13, "duration": 5.0}, {"text": "monad ism or Mona dolla G noun", "start": 2783.99, "duration": 5.28}, {"text": "especially in the writings of Leibniz", "start": 2787.13, "duration": 5.2}, {"text": "the philosophical doctrine that monads", "start": 2789.27, "duration": 8.94}, {"text": "are the ultimate units of reality and I", "start": 2792.33, "duration": 9.44}, {"text": "will stop there thank you", "start": 2798.21, "duration": 3.56}, {"text": "actually I won't stop there the two", "start": 2807.6, "duration": 4.03}, {"text": "other important things to do the first", "start": 2809.68, "duration": 5.88}, {"text": "yep the first is to thank my colleagues", "start": 2811.63, "duration": 6.48}, {"text": "Toni Morris and Jed Wesley Smith they", "start": 2815.56, "duration": 5.07}, {"text": "helped produce all this Scala yesterday", "start": 2818.11, "duration": 6.72}, {"text": "Jed's n types of it a masterful effort", "start": 2820.63, "duration": 6.72}, {"text": "and he put all the source available up", "start": 2824.83, "duration": 4.26}, {"text": "here so you can just go there if you", "start": 2827.35, "duration": 4.68}, {"text": "want to actually run this and then", "start": 2829.09, "duration": 5.04}, {"text": "there's one last thing which I have to", "start": 2832.03, "duration": 5.13}, {"text": "do which is to just remind you right", "start": 2834.13, "duration": 6.0}, {"text": "when you've got a tough job apply the", "start": 2837.16, "duration": 5.75}, {"text": "right mathematics that is your candle", "start": 2840.13, "duration": 5.28}, {"text": "when you've got to write a tough job", "start": 2842.91, "duration": 4.6}, {"text": "what you should think is this is a job", "start": 2845.41, "duration": 5.96}, {"text": "for lambda calculus", "start": 2847.51, "duration": 3.86}]] |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment