You're watching FJTN, the Federal Judicial Television Network, coming up on Court to Court. I think that by helping people learn those skills, we not only improve job performance but job satisfaction and confidence. We relieve a lot of fears and training. And on March 3rd, 1879, Lockwood became the first woman admitted to practice before the U.S. Supreme Court. So it's been an incredible transformation of the judiciary that it's become the rule of law, is settling in, people are looking to the courts to settle disputes, it isn't just a rubber stamp from the Communist Party. This is Court to Court. Your connection to what's happening in the federal courts around the country, providing information and ideas that will enhance your job and how the courts function. Now with today's program, Michael Burney. Welcome to Court to Court, the Federal Judicial Center's educational magazine program for all court employees. Today we'll see how one court provides CMECF training for attorneys and their staffs. We'll learn about two 19th century female legal pioneers and we'll hear from several court staff about their participation in judicial administration projects overseas. As the transition to case management, electronic case files continues, courts face the challenge of training attorneys and their staffs to use the system. This is handled in a variety of ways. As some courts require training and others leave it up to the attorneys to learn on their own using online materials. We recently visited the bankruptcy court for the Western District of Kentucky to learn how it handles the job. The court mandates that all cases be filed electronically. The court requires attorneys to attend CMECF training. Clerk of court Diane Robel and her staff decided to provide training for the prolific filers early three months prior to going live. We tried to provide as many resources as we could thinking that the better we handled this job up front, the less work we would have on the back end as those attorneys and their staff started to use the system. We knew that if we could get the bulk of the attorneys in quickly and they could start test filing it gave them more time to learn it and it was better for them as well as for us at the end. For those who are a little resistant to the ECF training, we would, I personally would call them on the phone, talk to them, go over the situation, what requirements were needed, what it was really about. We wanted to provide them with customer service, the best customer service we could hear at the court. Most judges like to say that if you have a lot of smart attorneys you're going to look a lot smarter on the bench and so you have to get them involved. I would strongly suggest that the judges have some sort of seminar or luncheon, some sort of informal communication where they invite the attorneys to come in. But judges Stosberg did more than make himself available to attorneys. And so I actually went to the training, went to it with no preconceived notions and participated in it and the attorneys were surprised and happy to see that we were joining in. You will be experts at this by the time you leave class, I promise, okay? When we first started training attorneys it was absolutely exhausting. We trained 11 sessions a week, two a day, four hours a pop, plus one on Saturdays. We had 10 people coming in at a time so 100 people came through our doors each week and there was still all the preparation to be done. At times we felt very overwhelmed. There was no other life other than CME-CF but it was our go to hit these prolific filers and have them trained. We wanted to get everyone into training as close as we could to the actual time of going live because it provided them both with time to do test filing but also we didn't train them so far in advance that they would lose all of their skills before we actually went live. Just to tell you what a few of these other buttons do, if you click on the review button it's going to tell you. Robo wanted a team of proficient trainers, most of whom turned out to be case administrators with other responsibilities. She allowed the training team to totally be removed from their other positions so we could focus strictly on training these attorneys and be ready to go by our mandatory date. What that did was it cut down on the number of people we had available to do the case administrator work and consequently we were short supplied so we did have to ask for additional resources and we were fortunate in that the AO was positioned to be able to provide us with additional resources. We hired eight temporary staff members to get us through that time period. Everything we did was designed to facilitate and make the job of our customers, our attorneys easy as we can. All the credit goes to Susan and others in the training. She provided the leadership in the training area and they made it fun. We want you to get in this habit. We were told of an attorney who attached his grocery list instead of the document. That could happen. So many attorneys and their office staff, they have that fear when they come to the court as to what is this all about. I think the atmosphere makes them comfortable. Having fun even in a stressful situation can relieve a lot of tension. It's our philosophy, not just mine, but the entire office that you've got to be able to laugh as you're doing things. If you can't laugh it sometimes feels like well it's intensely work. The office adopted a theme, catch the wave, and decorated the training room to help create a less intense atmosphere. It adds a little fun to it, makes it a little lighter. I do better when I'm having fun, when I'm not so uptight. We think learning sinks in better if you have fun doing it. When you work in law there is a lot of pressure and anytime the atmosphere and environment can be lightened up a little bit it's a nice pleasant relief. I think that by helping people learn those skills we not only improve job performance but job satisfaction and confidence. We relieve a lot of fears in training. What happens if you attach a document and you actually file it and send it to the court and you realize almost immediately or an hour later that you've sent the wrong document? Call the court immediately, yes, if you catch it. I'll show you at this point, I'll show you where the cutoff point, so if you were to catch it before you actually sent it to the court you could stop it at any time, it's not going to be sent. But if it's already gone through, yes, call us immediately and we'll take care of whatever it is. The most difficult thing about being a CMECF trainer is that it's very rare for everyone in a class to start at the same level. We have novices and we have advanced students and you have to find a way to pace that so that you don't lose people or go too fast. The clerk's office helps solve that difficulty by keeping class size small and by giving as much one-on-one attention as possible. That's okay to say okay, there we go. Okay, great. They always have both an instructor and someone to operate the computer and sometimes a third trainer to walk about solving individual problems. So I was very nervous coming in today and she was nice enough to stop and help me when I would begin to panic because I wasn't keeping up. Each class lasts three to four hours but the trainers have plenty to do before the students arrive. Preparing to teach a class is very time consuming here for us. Each participant receives a manual. The 300-page manual covers all the training information and examples of screens. Plus, we create the agendas, we prepare the logins and passwords. So once they leave training that day, they are certified as an electronic case filer and they leave and start filing electronically. So each class, as far as prep time goes, probably takes about three hours. Robel is emphatic about what it takes to make attorney training successful. I would say hands down having enthusiastic trainers, good people who are genuinely interested and willing to give of themselves to produce good materials, to provide good interesting training. The clerk's office also makes sure that each person trained has a contact at the court. So that if questions arise after they've been trained and that they're working on the system, then they have a contact person that they've seen, they've met, they know their name and can call directly to them to ask for assistance. You have to have a good support system in place for when they go back into the real world and do this. I can check that for you or I can transfer you to our help desk. The key is communication, keeping the lines open, letting them know that we're here to help them as a court, the computer-based training modules that the attorneys could view before coming to training if they would like. Those are still out on our website. We also have our training manual and any updates to that manual is also on our website. Any information that the attorney needs to know immediately is posted on our systems news along with being emailed. I would say that the attorneys who some were adamantly opposed to electronic case-filing and being required to undergo training and to change their way of doing business have been, in a very short period of time, have been our greatest supporters. And I've come back and said this was the best thing that we could have done. We're going to have graduation, so get your tissues out. This is that touchy moment, okay? And remember you do graduate today, okay? This is our graduating class of March 11th. And you need to clap for your fellow classmates, okay? Jill Martino, yay! Once the attorneys get comfortable with it, and again I think the training process is what allows them to get comfortable with it, they're going to find that it's extremely efficient and that it really does meet their needs as much as it meets the court's needs. And to the judges I would say that you have to be A plus in computer appreciation. You don't have to be a nerd. You don't have to have to be A plus in computer skills, but you have to have that appreciation. Almost two years after going live, the court continues to provide one training class each week. There's a big turnover in office staff. We'll have paralegals and secretaries. We also have those that are passing the bar, and we've had a few that have come back for additional training. Craven's philosophy to make training successful is simple but effective. For those that are starting out with CMECF attorney training, make it fun. Not just for the attorneys, but for yourself. I think that will relieve a lot of the stress and pressure that you may be under. The second thing I would suggest is communication. Leave those doors wide open. Let the attorneys know that they can contact you. I'm terribly proud of our staff and how well they've taken on what I would consider to be a huge complex transition and have done it in a very short period of time and have done it so successfully. It just makes me beam. The Center makes available a web-based ECF tutorial for attorneys and law firm staff. You can access it by going to the FJC's site on the court's internet on the DCN and click on ECF 101 tutorials. There are both district and bankruptcy court versions, as well as answers to other questions. With many women practicing law and serving as judges today, it's easy to forget the struggle that women once faced to enter the legal profession. Our moment in court history focuses on two pioneers who attacked the barriers that kept women out of the profession in the late 19th century. My colleague Bob Fagan tells the remarkable stories. Myra Bradwell and Belva Lockwood began their pursuit of the law about the same time in different parts of the country. In the 1860s, Bradwell undertook an apprenticeship in her husband's law office. In 1869, at age 38, she passed the Illinois Qualifying Exam and applied to the State Supreme Court for admission to the bar. In 1868, Lockwood, a teacher who operated her own private school in Washington, DC, sought admission to several law schools in the city and was accepted by one. In 1873, at age 43, she was admitted to the Washington Bar. Bradwell, meanwhile, had been denied membership in her state bar by the Illinois Supreme Court on the basis that the sex of the applicant is a sufficient reason for not granting this license. The court warned that if women were allowed into the legal profession, then every civil office in this state may be filled by women. Bradwell appealed to the U.S. Supreme Court. In 1873, it handed down an 8-to-1 decision affirming the state court ruling against her. In concurring, Justice Joseph P. Bradley emphasized the wide difference in the respective spheres and destinies of man and woman and concluded that the paramount destiny and mission of woman ought to fulfill the noble and benign offices of wife and mother. This is the law of the Creator. Ironically, by the time the Supreme Court ruled, the Illinois legislature had already passed a law drafted and parked by Bradwell, opening all professions to women. But Bradwell did not reapply. By 1873, she had already achieved great success as the editor-publisher of the Chicago Legal News, which she founded some years before. For two decades, it was the most widely circulated weekly legal newspaper in the country. The paper offered official publication of newly enacted Illinois statutes and synopses of state and federal cases. It also served as a vehicle for Bradwell's advocacy of reforms of laws affecting women and other groups and the legal profession itself. She was, as she told a reporter, too busy to practice law. Through the Chicago Legal News, Bradwell championed Belva Lockwood's fights to gain admission first to the Bar of the Federal Court of Claims in 1874 and to the U.S. Supreme Court two years later. Both rejected her applications. Supreme Court Chief Justice Morrison R. Waite wrote, by the uniform practice of the Court and by the fair construction of its rules, none but men are admitted to practice before it as attorneys and counselors. This is in accordance with immemorial usage in England. In an editorial, Myra Bradwell excoriated the Court. She wrote, The same reasoning which the Chief Justice used to exclude Mrs. Lockwood would compel every attorney who appears in the Supreme Court of the U.S. to wear a gown and wig. Lockwood turned to Congress. With strong support from Bradwell, she drafted and lobbied intensely for a bill to allow women to practice in all federal courts. It became law two years after the Supreme Court decision. And on March 3, 1879, Lockwood became the first woman admitted to practice before the U.S. Supreme Court. One year later, she sponsored the first Southern Black lawyer, Samuel Lowry, to be admitted to the Supreme Court Bar. Belva Lockwood had a long illustrious career in the law and as an activist for women's rights and for peace. She ran for president on the National Equal Rights Party ticket in 1884 and 1888. She died in 1917. In 1986, the U.S. Postal Service issued a stamp to commemorate her contributions. Myra Bradwell continued publication of the Chicago Legal News until her death in 1894. The Illinois Supreme Court admitted her to the bar on its own motion in 1890 and the U.S. Supreme Court did the same in 1892. Both actions were granted as of the date of her original applications in 1869, which is why some call her, America's First Woman Lawyer. That's a moment in court history. Join me for another in a future court to court. As this election season continues, we remind you that there are limitations on political activities by federal judiciary employees. Our court to court program in January included an interview on this topic with Marilyn Holmes of the A.O.'s General Counsel's Office. We encourage you to view that program again to refresh your understanding of what is and is not permitted. If you don't have a tape of that broadcast, you can order one online from the FJC Resource Catalog at www.jnet.fjc.dcn. Click on Resource Catalog and enter the program number that's on the screen now. The Judicial Conferences Committee on International Relations helps guide the federal judicial system's efforts to promote the rule of law and administration of justice throughout the world. Federal judges and other court personnel host foreign groups that travel here and sometimes participate in projects in other countries, sharing information about how courts operate in the United States. All of these projects are organized, sponsored, and paid for by other U.S. government agencies, foundations, international organizations, or foreign governments. On an FJTN broadcast earlier this year, my colleague Judy Roberts spoke with four clerks of court about their work on several of these projects. We've put together an excerpt from that program to give you an idea of the diversity of these overseas projects and what court staff do to help. To talk about their work, we invited Terry Depner from the Southern District of West Virginia, Dan Thomas of the Northern District of Georgia, Felicia Cannon from the District of Maryland, and Norman Meyer from the District of New Mexico. Norman was involved with two different projects in Russia and in Serbia. Russia has modeled its judicial administration agencies on those of the United States. The Russian-American Judicial Partnership, part of the United States Agency for International Development, invited U.S. experts to advise the Russian agencies on a wide range of topics, including record keeping, automation, and assigning cases to judges. They had a practice there of judges meeting with citizens about prospective cases ex parte, pre-filing, and they would give advice about whether they should or shouldn't file and who they should sue, and we, of course, from our system that was appalling, and we gave them advice that maybe you might want to delegate that to your judicial assistants and insulate the judges from that kind of ex parte content. Norman's other assignment was in Belgrade, where the Serbian government asked the United States to help set up a special organized Crime and War Crimes Court. What we did is we went in and said, okay, you have to set up this court from the ground up in Belgrade. Literally, they took over an old military courthouse that was evacuated from the military court, they left it, so we had bare walls and you create a new court, and so we were advising them everything from you need this many waste baskets to this many computers to this many judges to this many deputy clerks, and here's what they're supposed to do and how they're to be arranged in a new telephone system, and everything had to be done from the ground up. In Zambia, Terry Deppner was part of a four-person team that focused on an automated civil docketing system. The copper industry is a nationalized industry in Zambia and the money is held in trust for the children of deceased minors, and we were tasked with the responsibility of tracking that process. We actually flowcharted the receipt of the money from the minute it came into the court, how they wrote the receipts, the accounting journals they put it through, all the way through the disbursement and the writing of the check that went to the children or their guardian, and that report was submitted in anticipation that that process would be automated. The team also worked on reports that would help with case assignments. They called case assignments allocation of cases, and they were very concerned that they would get a proper report on the allocation of cases. They were really backlogged with a lot of different types of cases, and the ones that only got attention were the ones that were allocated, and there were several thousands of cases, I'm assuming, that were not allocated, and each judge carried a load of about 1,000 cases. Dan Thomas had one of the more anxious experiences. Three weeks after the fall of Baghdad, he and 12 other federal court and Justice Department employees went to Iraq. And we were there for the Department of Justice advising the State Department on what would be needed to help get their system functioning again. I had an opportunity to do, I was detailed to work for the Major General, the two-star American General, who was the Administrator of the Justice System, and he tasked me to be the Administrator of a pro bono fund to pay Iraqi lawyers. Basically, this was a way to get the lawyers functioning again, as I said, the court system had stopped working, and we set up a program to pay those lawyers, and I believe it are not $2 an hour, which is something that we can't envision here in the United States, but we had we had people literally knocking the doors down in Iraq to get that money, because these folks were totally broke. And we did that, and that helped get the system up and operating again. District Court clerk Felicia Cannon was invited by the Labor Department to be part of a team that included the FJC's Director of Education, John Cook, to advise Chile as it began to reform its labor law system. They had judges who had caseloads of somewhere between six and 8,000 cases a year. And what the process was, they had a frontline employee called an actuario that would actually interview the parties coming in and make a record. So it was actually the actuario's view of the case that the judge actually reviewed and decided the case on. They had a conciliation process as well, but there was no real tie and there was no real way of the judge being the person that actually decides the case that actually hears oral argument that questions the parties and then makes a decision, and that's what they were moving toward. And so they had a very good idea of where they were going, and part of our role was to meet with people from the Legal Aid Corporation, the attorneys, and the members of the two different ministries, and sort of to bring them all together to validate what they had found to aid in the cooperative effort amongst themselves. All four of our guests agreed that during these projects, they too became learners, especially of their host customs. Felicia recalled that in Chile, as in most of Latin America, when meeting someone initially, it is expected that thereafter, you greet each other with an embrace. Even the Chief Justice did this at a meeting with them. I think it was very important to recognize that as a custom because it was important for the trust to build the trust between the two different delegations that if in fact I think if one of us or all of us had been somewhat standoffish in that respect of recognizing that custom, I think that it would not have fostered the relationship that we ultimately were able to develop as a result of being receptive. Dan agreed with the importance of respecting other cultures. He said that he's very direct with people, but that created a problem in his work, checking each lawyer's time voucher. I'm actually interviewing an Iraqi lawyer there, and I felt like that I needed to make sure that they were doing the number of hours, and stirred up accountability, and the things that Clark's Accord, or at least in this country, taught to do. But in Iraq, a lawyer's word is his bond, and I'll have to tell you that a couple of instances, I offended some folks and nearly caused an incident because of questioning some people. Dan's point was underscored by one of Terry's experiences. The Zambians are such a warm and lovely people, they really truly are, but they're so polite, and so they don't want to tell you if they haven't heard you or understood what you were saying to them, but they would stand there kind of with their hands like in front of them and go, yes please, yes please. And you were just thinking that they were acknowledging what you were saying, taking it all in until we kind of determined a little bit later on that maybe they weren't quite under, that was just their very polite way of saying we don't know what the heck you're talking about. How did you get beyond the politeness to find out what the issue was? Well I don't know if it's a good thing or a bad thing about my personality, but one of the things is that I'm just persistent, and if I don't understand something I just kind of keep on asking it over and over, and so that's probably what won the day for me on it, and they were kind enough to me to never take, seem to take it in a bad or negative way. Norman commented on one of the ironies that occurred in its judiciary when Russia adopted a constitution. In the Russian two pilot courts there's 11 judges in each court, and 10 out of the 11 judges in both courts are women, and it's an artifact of history because of the Soviet system the judges were basically low-class puppets of the system, to be used as sort of pejorative term for it, and they got grandfathered in under the new constitution, so suddenly the women who were in a low-class job were suddenly they were the real deal, and they're all the chief judges, president judges of all these courts are women now, and they control the system at the trial court level in many respects, so that was kind of a big surprise. Even though he was speaking of the experience in formerly communist countries, Norman made clear the value of this work in all developing democracies. And so it's been an incredible transformation of the judiciary that it's become, the rule of law is settling in, people are looking to the courts to settle disputes, it isn't just a rubber stamp from the communist party that you can actually go there and get justice. That's our program for today. We value your comments about this program and your ideas for future topics. Please email your thoughts, comments, and suggestions to me at mburnyatfjc.gov. That's mburnyatfjc.gov. Our next court to court program will highlight how one court created new software to make more effective case management reports, and we'll learn about networking and blogs. We hope you'll join us. On behalf of everyone at the Federal Judicial Center, thank you for watching today.


Hello again. Hello. Thanks for having me back in Bangalore this year. It's always fun. Today I'm going to talk to you about zippers. Who's heard of zippers? Who heard of them like this week? Because you saw it on the schedule. It's a data structure. I'm going to try and give you an intuition for why you might use zippers. And we're also going to look at some of the fundamental arithmetic and mathematics that gives rise to zippers. So, I work for the Queensland Functional Programming Lab, located in the state of Queensland, Australia. It is funded by the CSIRO, Federal Government, Commonwealth Research Organisation, and Advanced Queensland, the Queensland State Government. We're a team of about eight or nine Haskell programmers. Some come and go. The Australian Government wants us to write Haskell. That's what I conclude from this. Maybe we need to talk to the Indian Government. They should be here. We should put them in the room somewhere. Okay, zippers. The term zipper describes an end-hole context into a data structure. Okay, so by that I mean think of a data structure of any kind. It could be a list. It could be anything. And we pull out some holes from that data structure. Usually it's just one hole. Okay, so for this talk I'm just going to say n equals one because it makes it easier to talk about. But zippers in general, it could be some number of n. Okay, so I'm going to talk about one-hole zippers, a hole. I'm going to tell you what I mean by a hole. Okay, so that is a data structure that has a hole or a pointer on a focused element. So I'm going to give you an example. Okay. But one of the most important properties of a zipper is that we can traverse, so we can move that hole through the data structure in an efficient amount of time. So for example, constant time. So the example I'm going to give you, this is like an informal way of thinking about a zipper. Take any data structure. Just think of one right now and walk along it. Stand wherever you are and look around. What do you see? The things that you see is the zipper. Okay, I'll give you an example. I'm going to use list as an example. Who thought of lists? Here's the list one to ten. I literally lay it out on the floor in front of me. There it is. It's made of cubes. What I'm going to do is I'm going to walk to the element seven. I walk along it and I stop and I look around. What do I see? Seven is the hole. That element is the one-hole. Or the focus we sometimes call it. I see this. I see six, five, four, three, two, one, eight, nine, ten, seven. So I see a list to my left, a list to my right, and the thing that I'm standing on. It's three things.  It's a triple. We often call the thing that we're standing on the focus. I'm currently focused on the number seven. And I can traverse to my neighbors quickly. I can move over to the number six. And if I looked around, I'd still see two lists and the thing that I'm standing on. I can move in constant time in this case. So moving on to the number six is just constant to my neighbor. So if we look at this triple here and I'm standing on the seven, I see this to my, the things that I walked along to get to it, and that's still the things I haven't yet walked along. And I move over to the number six. I can go from this structure to this structure in constant time. Okay, I could write a function to do that. It would just be move over one, put the thing that was over there, put the thing I was standing on back over here, take the thing that's on my immediate left and just stand on it. That's what the code would do. The zipper for a list of A is the triple of a list of A, a list of A and the thing that I'm standing on. Okay? That's for lists. We call this the list zipper. We could think of some useful operations, like for example, move left and right to my neighbors. That'll run in constant time. I don't always get a zipper back, by the way. Sure. Why is the zipper for a list of A? List of A and list of A. So here's the list and over there is a list of A. So that's this one here. Over there is a list of A. That's this one here. And the thing I'm standing on. That's this one. Okay? I could say move along the zipper until a predicate matches. Like move to the first even number or something like that in the list. I say do it left, do it right. I could say modify the thing I'm standing on, add one to it. Or I could delete. Actually I was going to say when you say move or left, I don't always get a zipper back. Because if I move all the way to the left and there's nothing on my left, I can't move left. So I'd get a maybe list zipper. And the same is delete. Delete the thing I'm standing on. That means I have to move on to something. But what if there's nothing to stand on? So I might not get a zipper back. It's maybe list zipper. What about a multi-way tree? So that is a node with zero and children. What is its zipper? So the data type for a tree is, yep, question? A list with zero, one or two elements. Yes, it can. I think I even have that example. So in this talk, I'm going to show you how to calculate the zipper. Like with a calculator. There's a way to do it. And I think I even have that. It might be three, actually. I'll see if I can find it. So a tree is either A, the root node, or a list of trees, my children. It's a multi-way tree. Here's a diagram of a multi-way tree. Let's go and stand on an element and look around. What are we going to see? We're going to see our left siblings, our right siblings. They're all lists of trees. There's a list of trees over there and all their children. The thing I'm standing on. The element that I'm standing on, the focus. My children. It's a list of tree, all the things underneath me. And what about my parents? So my parents will be my parent and all of their siblings. And a list of those. So here is the zipper for a multi-way tree. I can move around a tree in constant time using this data structure. So this is just an example of a zipper. There's an obvious question, which is why would I even need a zipper? So I'll get to that. So here are some operations I might do for a tree zipper. Move to my parent or child, like move up, move down, move left, move right. It could be like a tree could be a HTML document. Move around the HTML document, shifting your focus onto the different elements.  Go back up to your parent. Whatever it is you need to do. Modify when you see whatever it is you see. I've written zippers for all of these before. A JSON data structure. Right, because JSON is recursive. You can have an array of JSON with objects and all the way down. Move down the JSON data structure. Do things when you're there. Move back up. Yes? Of calling modify. I don't, but I could write one real quick. If I get time, I will. Who came to the intro two days ago? Intro to Haskell. And when we were there, we talked about functors and monads. Do you remember that? Functor is anything that maps. Monads are anything that maps and also does bind and pure. A co-monad is anything that maps and also extracts. Okay, so from some f of a to a. And also duplicates. From f of a to f of f of a. This is what a co-monad is. Anything that maps then extracts and then duplicates. With some laws. Is a list zipper a co-monad? That is to say, can I write a function extract? List zipper a to a. Yes, that's the focus. Does it map? Yes. And does it duplicate? Yes. Given a list zipper, give me a list zipper of all the other list zippers. That is, move the focus around. This is a list zipper of list zippers. It duplicates. What about a tree zipper? Can I map across it? Can I extract? Can I make a tree zipper of tree zippers? Yes, I can. I can write these functions. I'll show you the code, but it won't fit. It can be done. List zippers, tree zippers are co-monads. Actually, all zippers are co-monads. Isn't that interesting? You could say, I'm thinking of a zipper. I already know that you can duplicate and extract it. It's a co-monad. So let's use the co-monad for the list zipper and do something. Do any adjacent foci in the list zipper satisfy a given predicate? This is the use case. If you're subscribed in your email, requirements.docx, we have to write this function for some reason. We write this function, and we're going to use this function, find all zippers with a focus adjacent to a given value. That is to say, give me all the zippers with a focus adjacent to a given value. I said, go and find all the numbers that are adjacent to a given value of that focus. I'm standing on three. Find all zippers that are adjacent to the number three. Immediate neighbors. We would duplicate. This is one way to write it. Call duplicate for the list zipper. Call two lists. Given a list zipper of list zippers, I can just take that triple and make it a list. Now I have a list of list zipper. Use the regular old filter function. You know the filter function. Just go through a list and keep all the things satisfying our predicate. We still now got a list of list zipper. Here's the code. We duplicate two lists, call that function that we just wrote earlier, and then filter that predicate. I've used the co-monad to implement a specific use case. I generated a list zipper of all the list zippers. Then I used regular list functions to go and find the thing I needed to find. As an example. So I say, find me all list zippers that have a focus adjacent to three, which is this one here where the focus is two, and this one here where the focus is four. This is all of those list zippers. Just for some reason I needed this, suppose. Using the co-monad. And another example. So there's two threes in this list zipper. This one and this one. And so these three list zippers are all the ones that come back. They all have a focus adjacent to three. Who wanted that in their text editor before? Think about what that operation is. Go to a specific character in my source file and do something just next to it. You have wanted that, right? I have. Put a left parenthesis there. I forgot to type it. For example. I think we should write programming languages this way, by the way. Just give me the zipper for the syntax tree. Stop typing text in text editors. That's a different talk. This is just another use of zippers. If you're not sure why I might use them. This is my workstation. And you can see I've got some windows open here. And I think this one here has focus. It's got a bit of red around the border there. That's the focus of the zipper. This is written using a zipper. Who uses X-monad? Who's heard of X-monad? That's a zipper. There's the focus. And I say, move to the neighbor. I change focus on the window. I start typing in another window or something like that. Well, I'm using a zipper when I do that. But an intuition for why would I actually use a zipper? Why wouldn't I use a lens? Who's heard of lenses? Cool. I'm going to contrast zipper use cases to lens use cases. You all right? Why wouldn't I just use a traversal and a lens? So lens gives us compositional properties. I can say navigate down the data structure by composing some lenses to get down the data structure to do whatever it is I need to do. But zippers give me context dependent updates. So that is to say I can look around me when I get there. Lenses don't give you that. Lenses just view a thing down in the data structure. And all you know is you're at that thing. You can't look around. So if you need to compute something that's dependent on where you are in the data structure, we would use a zipper. So lenses are when you have exactly one thing inside the data structure. For example, I'm viewing the y inside the triple of x and y and z. But that's all I get to look at. I don't get to look around me with a lens. Or a traversal is when I have zero or many y's. There's zero or many y's in here. All I get to look at is the y's. I don't know where they are. I don't know what's next to me. Traversals only give me that ability to target the y. Whereas a zipper allows me to go to a specific y and look around at the y's. I can move along the data structure and I've got context when I get there. All right, this is the fun bit. Who knows why algebraic data types are called algebraic? Or because we can do algebra with them. Let's do some algebra. Some types. If you have either A or B, algebraically this corresponds to A plus B. If I have A and B product types, the reason they're called product types by the way is because they're multiplication. I can do multiplication with them. It's A times B. Less well known is if I have a function from A to B I'm taking B to the power of A. I'll show you what I mean by this. We also have unit. Unit just means one. And we also have void. Void means zero. If you create a data type called void and you have no constructors, you can never construct it. That's zero. Or you can create one called unit. It has one constructor. That's all it has. That's one. Let's look at bool. Bool is unit or unit. So a constructor carrying nothing is the same as unit. It just means one. So we have one plus one. Bool equals two. It's either A or B. Unit or unit. One plus one. Two. Bool equals two. What about the maybe data type? Who's heard of the maybe data type? You've probably seen that before. Maybe A. This is carrying unit because it has no values in the constructor. It's one plus A. So for example, maybe bool is three. One plus two. Maybe A is one plus A. Algebraically. So let's just think of an example like either void A. Zero plus A. That is equal to A. And if you think about this intuitively, if I said to you construct me a value of that type, you will be able to do it in exactly the same way you could construct an A. That's the same number of things you could do.  It has no constructors. You're always going to call the right constructor.  You'll never construct this. You need to give me a void and an A. You can't get a void. You'll never give me one of these. You can only do zero things. I find this an interesting way to demonstrate the algebra of algebraic data types. Here I have two times two. Here I have two plus two. And here I have two to the power of two. They are all four. There are four things. How many functions can you think of of the type bool to bool? There are four. There's the identity. Given a boolean, return it. There's negate. Negate the bool. There's always return true. Ignore the argument. And always return false. There are no other functions. Two to the power of two. Similarly, you can say left true, left false, right true, right false. Four. They're all four. So I use this algebra in my work. If someone says here's a data type, I calculate quite often, to figure out how many things fit inside this data type. It's a useful thing to know. It gives us the number of inhabitants. When we say there are four functions of the type bool to bool, I might say there are four inhabitants of the type bool. Let's just have a look at a few more examples. Here I have one plus two to the power of two plus one, nine. So you could sit down with a pen and paper and figure out all nine.  Imagine I handed you that data type and said how many of those are there? Well, there's 40. You can calculate it. What is a list of A algebraically? Well, it's either zero A's or one A's or two A's, right? It is, you know, one A or A plus A or sorry, A times A, etc. It's this series. And we also know that it simplifies to this. If you want to go back and do your algebra schools and figure it all out, it simplifies to this. We can see actually that this is nil or cons. It's the empty list, one or plus cons, the head and the tail. Who remembers calculus? Okay, for those of you who didn't put your hand up, me neither. I'm going to differentiate some of these things. Okay? Here is a data type which is similar to the one that you asked about. It's not quite the same but it's almost the same. I have x plus x times x. That's the data type that I have and I'm now going to differentiate this equation. So think about just try to get an intuition for this data structure first. I have either an x or a pair of x and x. What is it zipper? Walk along this thing and look around. What do you see? Just try to get an intuition for that. Next I'm going to differentiate this equation. So I do. I remembered calculus for one day while I write these slides and I forgot all over again. It turns out that the answer is one plus two times x or the partial differentiation. One plus two times x. That looks remarkably like the zipper. Right? Am I standing on the left or the right? And if I am standing on the right which of the x's am I standing on? It seems like the zipper except for the focus. Right? After even. So we can do this with algebraic data types. I think that's meant to be a bit to the right that tangent line there. Still another one. I have a pair of either xx and either xx. In other words I have x plus x times x plus x. We're going to differentiate it. And when I do I get eight times x. This one might be a bit more intuitive. Having a look at this data type walk along it or look around and what do you see? In order to denote that idea you're going to need the product of eight x's. I decided to write eight like this just I can write it anyway but that's eight. Two to the power of three or two to the power of one plus two. Here's a real simple one. Walk along this thing, look around and what do you see? Well if I was standing on the middle one I'd see an x and an x and the thing I'm standing on or I could just see two x's or I could just see two x's. When I differentiate this I'm going to get a data structure that is look around what do you see except for the focus. So I'll just see an x or an x or two x's or two x's. I don't get to see the focus. So x to the power of three differentiate it and I get three times x squared. Or in other words maybe bool three xx. Maybe bool tells me which x I'm standing on this one, this one or this one that's three and these two x's are my neighbors wherever it is that I'm standing. Every time I differentiate a data structure I get this thing that looks like a zipper. It turns out that that's how I calculate a zipper. Isn't that great? You might say, you know I've got this data type and I need to work out a zipper just do some calculus. Now you have it. The derivative of any data structure is its zipper. You've just got to put the focus back in. Isn't that cool? And if you're not sure I'm going to do it with a list. Remember a list and a list zipper? Okay, so we have a list of A, the zipper is the focus and two lists. This is the definition of a list. One or you know A to the zero plus A to the one etc etc. You do some working out and you end up with a result which is pretty obvious. It's either nil or it's cons with a head and tail. So you remember if we go back to the rules I gave you rules for addition, some types, multiplication, product types, exponentiation, functions. But when we do this we end up with one over one minus A. I didn't give you a rule for subtraction. But that's okay. We don't need it. And I'll show you why. I'm going to differentiate this equation. And when I do I end up with So I end up with this equation where U equals one minus A. Or in other words I end up with one minus A the reciprocal of squared. I simply end up with two lists. So that is the zipper without the focus. So all I need to do is calculate the differentiate the equation and put the focus back in and now I've got the zipper. If I wasn't sure what a list zipper was I could do it informally. I could say walk along this list and look around what do you see? Or I could just do some calculus and I should get the same answer. Isn't that cool? I think that's cool. There's just some good rules for working out a zipper. Just differentiate it. There's the zipper. It's the triple. So actually there's the derivative a pair of lists. List times list. Put the focus back in and now we've got the actual zipper. Okay? Put the focus back on. So I've arrived at the same conclusion. I did it informally and then I just did it with calculus. It gives me the same answer. So one day I really did have to calculate the zipper for JSON. I was working, you know, a Java company and they're like throwing JSON over the network and it keeps hitting me in the face for this stuff. I just used calculus because it was quite difficult. That's it. I've got a pen and paper. I'm going to differentiate this thing. Now I've got the zipper. The end. Thanks. Finished a bit early. Do we have any questions? Is there a tool to calculate? Like the derivative? Yes, there is. There's a library to do it. Actually it's called Zippers on Hackage. And all you do is just say here's my data type and it says here's the zipper. It actually will give you back the data type and just say here's the data type. Yeah. You asked about writing a function. I can write that if you like. We can take some questions before. Any other questions? Did you want me to write the code that you asked about? Yeah, I have actually a longer question related to that. Can zippers be used in place of lenses? No. Why not? It's about zippers having context.  Here's a list of numbers. Move to the first even number and when you get there then move that many places and add one. If I said to you move to the first even number you got to the number four and then move four places and then add one to whatever it is you're standing on I'm doing this with context. Now if I tried that with a lens I'd say find the first even number and all I'd get is the first even number. I don't have any context of where I am in the list. And then I'd say now move past it do find again move four places function and then do an update but I've gone across the list twice. I have to start at the list each time. Whereas a zipper gives me the context as I go through the list. So they're the two separate use cases for them. I guess my question was other way wherever you use a lens can you instead use a zipper? The downside of this we get the benefit of context depending on updates. Because we don't get compositional properties. So that is to say we might go across the list and when we get there there's like an object and we want to navigate then down that object. I can do that with a lens but I cannot with a zipper. I can use both. I can say move the zipper over here get to the context and then lens down onto my object. As long as I don't need to do anything context dependent down there and then come back up and do my context dependent updates back up here. So I get context dependence but I don't get composition like I can with lenses. It's an efficient way to do BFS I think. BFS? What's that? Oh yeah. I think it's one way to do the BFS in the tree. Yeah. I wrote a function to do that recently. What was that for? Ah, HTML. Yeah. Yeah. I literally wrote breadth-first search for HTML like last week. I can show you the code. Yeah. How did you end up finding calculus and work out here? How did I find it? I just stole the smart guys ideas. I didn't find it. It was it was this paper here. They're the people who found it. And I'm like that's cool. Now I don't have to imagine the zipper later. One more question. This is regarding the algebraic type. Yeah. Everyone speaks about some types and product types but never about subtraction or division. Yeah, subtraction and question. Yeah. Has anyone really used it? These two? Or is there any way to represent a subtraction or division? There do exist other type system where they have question types and things like that. Yeah, I tend not to use them but that's just my bias because I use Haskell a lot. But they do exist, yeah. Yeah. Hey Tony, you said that function invocation is exponentiation. Could you expand on that please? Sure. So to give you an intuition for it, like I'll tell you the fact, right, which is given a function a to b, there are b to the power of a inhabitants. If I said to you give me a function that takes bool to unit. That's one to the power of two. You're going to write one thing, unit.  Now write me a function that goes unit to bool. You're going to give me two to the power of one things, two things. You're either going to take the unit and return true or take the unit and return false. So given the function a to b, you can calculate its inhabitants by b to the power of two. Does that make sense? Just to clarify that, that's the maximum number of inhabitants. Now it's the exact number of inhabitants. I mean you can have a unit to bool function which always returns a true. Yeah, that's one inhabitant. Sorry. What's the partial function? Let's just write some code. How many functions have that type? Two to the power of one, right? There's one. There's two. There is one. And here is the other one. There are no others. There are two inhabitants. That's what I mean. Whereas if I said to you how many functions have this type, this is one to the power of two. One. There's only one function with this type. There it is. There are no other functions. Does that make sense? Hey, one question around the list. On the list? The list was actually, algebraically it says infinite series, right? One plus a. Yeah, one plus a times list of a, yeah. So every recursive data structure is like that, always an infinite series? No, so list is recursive in its definition, right? But say the triple of three x's, just like three x's, that's not recursive. So that's why we end up with a recursive answer. Say tree would also be a similar series, right? A tree, normal tree. The number three. Tree, tree. Yeah, tree ends up recursive as well. The question is, will every recursive data type end up as an infinite series? I don't know. Is that the question later? That is a really good question. I suspect the answers no, but that's just the feeling in my bones right now. I don't have a good answer. Yeah, good question. Let's figure it out. So if you, if I am having a list of zipper, zipper list, if I wanted to move left or move right, I have to modify both the iris. If you have a list of zipper or you just have a list zipper. List zipper. Yep, and if you want to move left or right, what happens? I have to modify both my iris. So my current focus, I have to add it in the right one. Yep. And remove an element from the end of the list of my left side. Yeah, you want to delete an element. Sorry. Oh, you want to rotate it around the other side. Or if I just want to shift to focus by one position. Yeah. So then I have to modify both the list. Yes, let's write the code. You'll see it's O1. Yeah. All right, that's a list zipper. I'm going to go move left. What move left is going to do is going to say list zipper A. It's going to give me a new list zipper. Okay. If the list zipper has nothing on the left, there are no lefts. There's nothing on my left. I cannot give you back a new zipper. But if it does have at least one left L, focus X, and the things to my right are, then I am going to return you a list zipper with those lefts. The focus will be L. I'm now moving on to L. And the rights, because I've moved to the left, the thing that I used to be standing on will go on the front of the rights. Okay. Does that make sense? So it's O1. I can move to my neighbors in O1. Okay. Are there any other questions? I'll ask mine. This learn your Haskell for greater good has a chapter on list zippers. Does it? It does. And while learning Haskell, I skipped it because it seemed too complicated. And I've been using Haskell without actually using zippers. So it's a bit of a complex question. So where are zippers actually sort of shine in what kind of application they shine? Second, do immutable data structures force zippers on us for certain computations? Are we forced to use zippers if we are using immutable data structures? I mean, I haven't heard zippers being used in Ruby or Python or anywhere else as such. I first came across them in Haskell which is immutable by default. Okay. I mean, if they're so useful, why doesn't the prelude have them? I just looked up data.list it has all sorts of functions it doesn't have a zipper. The answer to that question is quite simply history. The prelude is quite old now and zippers are not in terms of their usefulness. We only just found out I don't know what year it was but it was in the 2000s that the derivative of a data type is a zipper. That's just history. A useful example I can give you one that I've used so I was working for a Java company writing Java and people sending JSON over the network and they go, here's some JSON, great big blob what am I going to do? I wrote a JSON data type then I wrote a zipper and the reason I needed zipper is because once we have the JSON value, I need to convert it into my domain value so whatever it was bank account or whatever it might be and so in order to go from the JSON data type to the domain value I wrote another library that moves a zipper through the JSON, pulling values out and putting them into my domain value and not only that I can put retry on it as well so suppose you go down the JSON value and then you go I was expecting an X but I saw a Y so I can't make your domain value I would say, oh no that's just because I sent it wrong, I'd write a library and just say retry and do this instead and the zipper can just keep moving through the data type the user of this library never gets to see the zipper I'm just moving the zipper through making the domain data type Would some generic parsing library in Haskell be using zippers internally for backtracking parsing? That sounds like backtracking parsing No I don't think so I guess you could but they do keep some context that's how they do their backtracking Would you have done this differently if you were using a mutable data structure are zippers forced upon by immutable data structures I don't think they're forced upon you it's more like if you put a stake in the ground and say I'm going to use immutable data structures you're going to run into the use case where you say go down the HTML document you're going to see the first href take its value and use that to know where to move next you're going to do a context dependent thing and that's where a zipper just says I'm here and I'm very useful for doing that I think that happens I don't think it's necessary for immutable data types though so even if you had a HTML document and it was mutable I think you still want the same thing right like we've all used xpath HTML or something that's kind of what zippers do except you lose the context when you get there it'd be good if you still had the context once you got down there thanks I hope to talk to you more about zippers outside if you want to talk more about it it was good, cheers thank you so much


The quick intervention of security agents on Monday evaded what would have been another bloody clash between natives and house settlers in just north local government of Platter State. An uneasy calm has pervaded the state following attacks launched in Basa and Riyam local government areas by herdsmen which claimed many lives and left buildings burnt. The herders also destroyed massive farmlands belonging to the natives. It was gathered there was a serious altercation which attracted other people within the community leading to fisticuffs where 10 people sustained various degrees of injuries.


Why narcissists devalue you. The narcissist will always find something wrong with you. They will always want you to do things for them, but then they will always find something wrong with what you're doing. A normal person would be grateful for what you're doing for them, but the narcissist will always find something wrong with it. You're bending over backwards to please this unpleasable person, and you try to justify to them that you're better than the other people they're comparing you to. But you feel like no matter what you do, it's never good enough for them. However, sometimes the narcissist appears to be happy. They appear to be satisfied with what you're doing for them, which is why you may choose to remain around them. Because sometimes they attend to your comfort and wishes. Sometimes they're polite and courteous. Sometimes they're funny. Sometimes they seem to care about you. But it's only because in that moment they've got supply. In that moment they feel important because they're getting what they want. They're giving you this fake unconditional love. They're only giving you something because they're getting something from you, and they know that if they're nice to you they're going to keep getting what they want. It's not because they care about you. It's not because they love you. But you mainly see this character in the early stages of the relationship. As the relationship progresses, you don't see this as much. Because they become more comfortable with you. They know how to manage your reactions to what they're doing to you. But they treat you this way because they're toxic. By default, all they can do is add negativity and upset your life. Because they're dealing with their own stresses and traumas. They're hurt. So they hurt you. They're dealing with unhealed traumas. They're dealing with abandonment anxiety. So they have to protect their ego. They have to defend their feelings of self-importance. Because deep down they know they're not good enough for you. They know that you deserve better. They're unhappy because they lack self-love. Which is why they can never be happy with you. Instead of dealing with their traumas, it comes out as arrogant. As though they think they're better than you. And you could never be good enough for them. When really, that's exactly how they feel about themselves. They just flip it around on you. Because they don't want to deal with their own traumas. So they tell themselves they're better than everyone. They tell themselves everyone thinks they're attractive. They tell themselves everyone is jealous of them. They're always looking outside of themselves for reassurance. Because they're constantly experiencing anxiety and distress. Resulting from their unhealed traumas. But when they do that, they're just digging themselves a hole. They're just validating their false self. Instead of getting to the root cause of the issue. Because instead of seeking reassurance from other people, they need to validate themselves. But because they don't do that, they're in a constant state of anxiety. Where they constantly need attention, affection and reassurance to make themselves feel whole and complete. Which is why they always need other people. Which is why they're always flirting with other people or on dating apps. Which is why they compare you to other people. Because they feel like they're not good enough. But instead of confronting these feelings about themselves, they project them onto you. They make everything your fault. Rather than taking responsibility for their own faults and mistakes. Rather than accepting that something is wrong with them. Which is why they never heal. Which is why their toxic behaviors never change. Which is why they always lie to you and manipulate you. Because they lack empathy. They're only focused on their own needs. They're only focused on feeding their ego. Which is why they abuse you and treat you with disrespect. Because they only care about what they want from you. Which damages you and causes you to act like someone who is damaged. You may engage in reactive abuse. And you may feel like you are to blame. Because they're saying you are. But to take your power back. You need to accept that they're never going to accept that they're at fault. You need to accept that they're never going to be happy with anything you do for them. You're not responsible for their happiness. They're supposed to make themselves happy. By doing the inner work. And we need to heal ourselves. So that we no longer depend on their validation. Because that's how they control you. By making you think you're not good enough. So that you try harder to please them. It keeps you looking at yourself. So you don't look at them. And realize they're not doing anything for you. They're not making your life better. They're making it worse. But they don't want you to come to that conclusion. So they devalue you so that you think you need to do more. But they can never let you feel like you've done enough. Because then that means you would have to stop. And then they would have to reciprocate what you're giving to them. Which is something they never want to happen. Which is why they have to keep you thinking. That you're doing something wrong. They have to keep you in a state where you are constantly trying to fix something. So that you never stop to realize you're with someone who isn't adding anything positive to your life. They're just taking value away from you. Thank you for watching. I hope this video resonates with you. Please like, comment, share and subscribe. If you would like to donate, my PayPal link is in the video description. Coaching inquiries, you can email me at coaching.nax.fi.ru. Thank you for watching and I'll talk to you soon.