It's just like the open-endedness, it's like when you lie down in a field and I clear a night and you look up and it's just vast. That you know that sometimes makes my heart go a bit funny because it's like where does the end where's the end of it? I don't know. It's my stuff I know that but there's certain things that just give me a bit of a flip. I like the journey and I like the exploration and when you were talking about it then it makes perfect sense. Do you know what I mean? The purpose and the the meaning and you know where we fit into everything? Yeah because most people come to therapy I think. A to understand themselves. Yeah. Which leads to meaning of life in some way. So maybe therapy is all about at one level but there's no real answers. We demystify what goes on behind the therapy room door. Join us on this voyage of discovery and co-creative conversations. This is The Therapy Show behind closed doors podcast with Bob Cook and Jackie Jones. Welcome back to episode 89 of The Therapy Show behind closed doors with the wonderful Mr Bob Cook and myself Jackie Jones and in this episode we're going to be talking about different methods and approaches in therapy. Oh my gosh. Good gosh this podcast will go on forever but we I know it's only gonna last about half an hour but number 90s coming up soon then. It is it is just a couple more to go yeah. A long time ago very long time ago I started to be a therapist in 1985 in 1986 or 1997 I was asked by I think it was the ITV to be on a television program. Now where? Yeah and it was I can't remember what the program was but it had three therapists and I think three counsellors and we were talking about various things but one of the people who was chosen to well to start you know the three therapists was me and another person called Windy Dryden and now we are about 40 years later whatever I'm where I am but Windy Dryden went on to write lots and lots of psychophobic books and he's passionate back then with CBT so he's written a lot on CBT. He's quite well known he comes from London and he writes avidly one of the books which is well known was on counselling and psychotherapy and individual work and in that book he talks about the different therapy approaches and he quotes if this is correct I'll have to go back to his book that there's 563 different types of therapies and counselling in the United Kingdom. What been that? The transaction analysis which I was trained in, integrative psychotherapy which is what I was trained in, I did object relations training as well, I did some hypnotic induction. It's only four methodologies isn't it? There's actually a lot lot lot more methods. It's no wonder clients are confused a lot of the time isn't it? Yeah because all they want to do is deal with their problems. Feel better? Yeah. There's not many, well few very few clients are coming and say look I want this type of method of therapy. Yeah. That doesn't really happen. No. They want to be cured or they want to be happier or they want to be less depressed or they want to be more relaxed. They don't care in a way you know how they get there. Yeah exactly but it's interesting it's an interesting topic because you know I've had clients that have come to me that have tried other other methods and it's not been right for them. Oh that's interesting isn't it? And it depends what I was what went through my head was depends on what the therapist was and it really depends on the type of relationship they have with the psychotherapist. That's one of the things that I usually say because I think that is the most important thing rather than you know the method that's used. Yeah I mean the relationship yeah. A big research that came out and I can't remember the book again it was in 1993 by North Cross I think it was huge research quota and the clear evidence was that the relationship is far more important than the method. Yeah. So if you I just did a workshop not long ago on how to work with the unconscious and the younger self and it was it was two therapists and I was talking about the techniques and methods and the types of therapy that work with the unconscious and the younger self. I'll just go through a few not 563. Thank goodness for that. That's I will and then I well before I do that another way of looking at all these therapies is to split them up into five sections. Yeah. One would be therapies that deal with behavioral change. Another section would be therapies that deal with cognition and thinking change. Another section would be therapies that deal with emotional change. Another would be a section that deals with physical change. Another section would be those that work with spiritual changes and also a sixth section might be those that deal with bodily change. And I'm sure there's other sections as well. Yeah. But each of those sections we could probably find at least 20 or 30 therapies and I've another section which is as big when I say spiritual we could say transpersonal and that covers many, many different types of therapy. And then there's all the therapies that deal with sexualities and gender and all sorts of things. So as I talk, I can start realizing at least 500 mind, you know, my hit the button. But just in terms of therapies that deal with the younger self or would be evocative helping people access their unconscious because often, you know, looking at how the past effects of present is really crucial. You've got things like music therapy. Yeah. Drama therapy. Well, transaction analysis is crossing that. Art therapy. They're three really one sand play. There's another one. So we can look at all those creative ways hypnotic induction would be another one. What a method, I was going to say regression, but that's more method than a type of therapy. Gestalt psychotherapies to do. So we could actually go through many, many therapies in the humanistic section of the UK CP, which I'm part of, which would deal with how to work, you know, how to work with the younger self. Yeah. So there's lots of therapies and of course, there's lots of methods that go with those therapies. Let's just look at integrative psychotherapy, for example. So I was trained in integrative psychotherapy, which follows the work of Richard Erskine. But who came from America as an international organization. But his version of integrative psychotherapy is very different from many other people's versions of integrative psychotherapy. And according to where you trained and what school you come from, they may have their own versions of what integrative psychotherapy might mean.  It's, yeah, it's mind blowing. And as you were talking, this isn't something that I've just thought about now, I often sit and muse and think about things like this. There was a time where none of this even existed until somebody thought it up. Wow, that's an interesting way to put it in a plan and put something together to bring it into the world, if that makes sense. Well, yes. So if we look at psychoanalysis, the birth of psychoanalysis would usually talk about Freud. And that would get into the middle 1880, 1870, 1860, I forget when Freud was born. But if we go beneath that, which is what you're, I think you're hinting at, there's a whole, there was the whole growth of what we call religious healing, which takes us 17th, 16th century. And I'm sure we could trace right, right way back. And I think it's the human condition to search for purpose, identity, who we are, how to understand ourselves, that level of curiosity. Yeah, that makes sense. Because we are always searching for something, whatever that something is. Yeah. Now you're into the whole over another type of therapy, which I really like. And I think if I hadn't been a transaction analyst, I would have been attracted to this type of therapy. And that's existential psychotherapy, which deals with existential issues, like death, purpose of life, value of meaning, all the things I've just talked about, you know, which are to do with our very existence. Yeah.  Because I think that those existential issues have been throughout whole, you know, mankind if you like. Yeah. See, there's a part of me that gets scared with things like that, because it's like, I like cancers. I like to know where things end. And with existential things, it's like, there's a lot of philosophizing, and I don't just theories and all those sorts of things. And it's like, you don't, what's the right answer? And I'm not sure we get to that. Let's put another frame on it and Jackie, which might look at this in a different way.  And then they have had that very conversation with somebody today. And they go into anxiety, overthinking overwhelmed. But bringing control is very, very important. That's an existential issue, feeling vulnerable and out of control is another thing we've regularly talked about with our clients. That's an existential issue. Purpose and meaning of life often comes up all the time. So we might look at things in different ways. But if you're an existential psychotherapist, the last thing you're going to do is theorizing or philosophizing, it will be dealing with things like death instinct, dealing things with purpose and meaning in life. But not in a philosophical way that I think maybe you're addressing, but in a much more human way. I understand when you say that I'd be really scared of that. But you know, as a therapist, all these issues come up, maybe indifferently. Yeah.  And it's just vast. That, you know, that sometimes makes my heart go a bit funny because it's like, where does it end? Where's the end of it? I don't know. It's my stuff. I know that. But there's certain things that just give me a bit of a flip. But yeah, I like the journey and I like the exploration. And when you were talking about it then, it makes perfect sense. Do you know what I mean? The purpose and the meaning and, you know, where we fit into everything. Yeah, because most people come to therapy, I think, A, to understand themselves. Yeah. Which leads to meaning of life in some ways. And maybe therapy is all about at one level, that there's no real answers. Yeah. And that letting go of the need for control is a big thing with an awful lot of my clients. And it's scary when you say to them, you know, we're actually not in control of anything. We can control our reaction and, you know, two things. But outside events are 100% out of our control. The majority of the time. Well, you know, I was watching another reality television program. I think I've talked about reality television programs and another podcast. But anyway, when these people, I don't know, six or seven, they were they were buried in in caskets in the ground. And it's part of a task. Anyway, you know, one of them, which I was very impressed with, who was afraid of all this lot, she started to regulate her breathing, because that's the only thing she had control of. Yeah. And so you are correct. What you're saying, it's not much you're having control of, but we do have control of our reactions, our breathing, slowing ourselves down. And people have panic attacks and pulpitations, you may teach them that. Yeah. Yeah. It's quite liberating, speaking as somebody who was a bit of a control freak to come to the realization that we can't control everything. And when when I came to that realization, it kind of took a lot of pressure off me, trying to control everything all the time. Well, we have the huge, well, just in the last five or six, seven years, maybe Jackie, I don't know if it's more than that. We've had the huge increase in the whole area of mindfulness, which is all about that. Yeah, concentrating on being instead of doing. Yeah. Yeah. And, you know, I think mindfulness is a really great, but it's, you know, it's sold as a modern day phenomena, but it actually no. Yeah, I love mindfulness. So meditation and mindfulness, all these sorts of things, they're all about being moving away from doing. Yeah. There's so many therapies around mindfulness and meditation. You know, it's amazing. Yeah.  Reiki and the list just goes on and on and on with different. It's what I suppose it's what fits for you. You know, it's something to go into a room and spend half an hour laughing isn't what they want. But for others, that will be right up their street. I think it depends on what we should have a podcast on this is what we mean by therapeutic. Very good question. I'm gonna write that one down. That's what really what you're really talking about. Yeah. What do we mean by therapeutic? And what do we mean by cure? Yes. And then we're that will determine the therapy that we choose. That is a good topic in the podcast. Yes, definitely. Because it's individual to each one of us, isn't it? I do really believe, though, that a majority of people come with therapy to understand themselves, whichever therapy they turn to. And a lot of the methods might change, but ostensibly, people want to understand themselves. And why they want to understand themselves is because they want to then have a more beneficial life or higher quality of life, whatever that is for them. But unless they understand themselves, it's much more harder. You can lots of behavioral tasks. So someone who comes in and has been smoking cigarettes for 30 years, you can give them behavioral tasks, tell them stop smoking. But unless they deal with what's underneath it all, I believe those I believe those changes they might make in accordance to behavioral tasks will fall away quite quickly. Yeah, as you get beneath the plaster, look at what is bubbling away there. So people need to understand themselves, I think. And I think there's a real existential thrust for people to do that. Yeah. Yeah, because once we understand, I'm going to cough. Once we understand ourselves, and we become more a word, then we're open to the possibility of change. But if we don't understand our own behavior or why we do what we do, then we can't possibly change it really. Not, not lasting change. That's it. Not lasting change. Yeah. I think by understanding ourselves, we have the elusive maybe possibility of choice. Yeah. And once we can then have that option to choose different ways, etc, etc, we might lead, which might lead to change. Yeah. Yeah. I wrote a book called Your Right to Choose in 1986. You've done a lot of things, Bob. Yeah. Which I produced about five or more, I don't know, it's private publishing with about 1000 copies. I've got a copy. I've got a couple left somewhere along the line because I kept them thinking, oh, they're just all gone. They did all go, but I kept a couple. And I, I've always believed that therapy is helping people get to a place of discovering they have their own right to choose. Yeah. That's quite powerful. Yeah. Seven direction they go. Yeah. Therapy should never be about a therapist telling or people what to do. I think therapy is about, by definition, helping the person discover their own opportunity to choose or their own opportunity for their own truth, rather than the truth of the therapist. Yeah. And therapy is wonderful for that because I can't think of any other time or place other than in the therapy room where you get to explore this stuff without fear of judgment or interruption or, you know, presumption or any of that sort of stuff. It's, it's a totally unique space. And so should be. Yeah, you know, in the outside world, we're always trying to fit into social norms or worried about, you know, people's opinion of us or what we should be doing or what we should be thinking and all those sorts of things. And all these different therapies have at the heart, I hope, helping the person or being a facilitator, the person at least understanding themselves and enhancing their lives and helping them understand that they've got options for change. And maybe we could talk about what Cure is, but leading at least that direction. Yeah.  We're constantly evolving. You know, and sometimes people say, you know, I went to therapy 10 years ago and I thought I'd sorted it all out, but, you know, there's some other stuff come up and it's like, well, yeah, because things have changed in 10 years. You know, it's not do it once. And then that's it. I'm sort of for the rest of my life because events happen, things happen. So we're constantly evolving and changing, you know, whether we like it or not. You're absolutely right. I mean, a model I do like is transaction analysis. And I think that gives some good model in the words of parent, adult, child to explain things really easily. Yeah, hold off. There's got like, there's an accessible language there. Yeah. Helps, therapists and clients in terms of a common language in the things we've been talking about. Definitely. As many, I think many disciplines, I like integrative psychotherapy, like gestalt psychotherapy, a lot of, like a lot of the humanistic therapies, which help give the client the opportunity to get to their own truth. And our TA particularly helps the therapist and the client with an accessible, common language to understand quite often complex psychological processes. Yeah. I think that's why I like it. You know me and a diagram, Bob, I love a diagram. And, you know, what you were saying then, it's about the client getting to their own personal truth and, you know, that can be accessed through lots of different ways. Oh, absolutely. I mean, I started going to Pilates and that's a therapeutic process for me. And that's what I'm saying really, this podcast should in some ways be cool. Well, what we might mean by therapeutic. Yeah, definitely. A walking nature can be really therapeutic for me a lot of the time. Absolutely. Absolutely. I mean, one of the really big movements in the last three or four, five, six years, maybe more, has been therapist walking therapy. Yeah. Walk with their clients. Yeah, equine therapy, the use of horses. And we've got, we know already the use of animals. Yeah, our therapeutic processes and walking, particularly, very grounding, for example.  There's a marvelous article by one of my colleagues who it was called walking, the walking cure. And she talked about how she used to walk with the clients and how much therapeutic that was for so many people.  However, Freud, 50 years ago, whatever, would have turned in his grave, because he would argue that, of course, once you walk outside the consulting room, you go away from the security of the consulting room. The therapist comes along what he would call loads of multi-transferences and, you know, he would turn in his grave. But I think all these types of walking therapy, equine therapy, all the therapies with many animals, et cetera, et cetera, et cetera can be very powerful and very therapeutic, as long as the therapist is trained to be able to work with the client in that way. Yeah. Not to do it off bat. Yes, yeah. I think my biggest takeaway from this podcast, Bob, is what you said, you know, what do we mean by therapeutic and what do we mean by cure? Of course, do we mean. Yeah, you know, yeah, what is therapeutic? And that's really got my old grey matter going. Yeah, and for most of people. Because we don't need to be sat in a room isolated from the outside world and just, you know, two people or whatever it is in there for it to be therapeutic. Oh, not at all. I mean, what about the Wynn-Hoff method? Yes, not that I've tried it. Well, Cal made me try the breathing and I didn't like it at all, but yeah, no. Well, I forget how cold the water has to be, but it's often called the freezing therapy. So who knows, who knows? I know many, many, many different types of therapy and but I do believe, I do believe the therapist needs to be trained and not go off their own bat in all this. Yeah, yeah, absolutely.  So I kind of get what you were saying before about whoever turned in the grave because they're out of the safe confinements of the room because it is a safe environment. You know, as I'm saying that, I'm just, you know, standing on a beach by the sea really makes me emotional. It's very therapeutic. Nobody needs to say anything or do anything. Just being there makes me emotional. Yeah, and I know quite a lot of therapies where actually let's take another one, silence therapy. Oh, I'm not sure I'd like that. I don't like silence, but. I could go on and on. I mean, some of the most powerful therapies I have been have been to do with the body and all the somatic stuff. Yeah, you know, that's amazingly. Can be amazingly in terms of healing and cure. And of course, into the question again about what is cure and what's healing? I mean, my daughter's a devout Christian and she if she was talking here, I'm sure she'd talk about the power of spiritual healing. Yeah, I'm suspect she'll go back to Jesus and the Christian faith and religious healing and all those things we started talking about at the beginning of this podcast. So for many people, there's many different approaches. And I think that. What is the beauty of what is cure is, well, I don't think we'll get mainly get to an answer, but it will be an interesting podcast. It'd be wonderful exploration of, you know, what that is. Yeah. But I've really enjoyed this one, Bob. There's there's lots and lots of different therapy or methods of therapy out there. I love as well as all of that. You know, the the individuals that undertake each one of those are going to put their own slants on it also. So you can kind of tenfold it all easily. But I think I've said this four time long for a fifth time, I'm going to say it's really important that the therapist is trained. Whatever, whatever method, whatever model, behavioural, cognitive, physical, spiritual, emotionally, they need to be trained. Yeah. That, I believe, is important. Yeah, me too. And I've some work to take it as in supervision. Yes. Yeah. Some sense of accountability. Yeah. Yeah. For the for their own well-being as much as anything else. Oh, for theirs and for clients. Yeah. Yeah. Yeah. Definitely safeguarding the client. But I think, you know, for others, therapists to be able to take that to somebody with knowledge as well, I think is is important. I'll tell you another therapy I mean, like, I know we're ending, but Ruby Wax, do you remember her? Yes. Yeah. Yeah. She became a psychotherapist. And she was really passionate about compassionate therapy. That sounds good. And I really like compassionate therapy. I'll just put this. I think it's fine, compassion for ourselves. However we do that is really important. Yeah, different ways. But I was thinking Pamela Anderson and another well-meaning meeting and became a psychotherapist. I forget what model she trained in, but I think it's so important for the therapist to have proper professional training. Whatever model method they use, behavioural, physical, cognitive, whatever it is, they do need to have some training. Yeah. Definitely. And they can always go to the Institute, Bob. Oh, yeah, you always can. Which is a very good place to trade. I can vouch for that. So until until next time, where I think what we're going to be talking about if we don't veer off topic again, is what works in therapy. Is that what the title of the next? Oh, my God. Well, it certainly is. That's certainly a wide topic, isn't it? Yeah, perhaps I'll start with what doesn't work. Yes. Maybe that can be the title. What does or doesn't work in therapy? Yeah, I think that's a better title, because the two go together. Yeah. Whatever model a person picks or goes for, what works or what doesn't work is vital importance, isn't it? Yeah. It's a therapeutic change and cure. Yeah, and it's not being fixed in the therapy room. I think this is what's going to work, whether you like it or not. Right, until next time, Bob. See you then. Bye-bye. Thank you so much. Bye.


All right, so before I get started, how many people have experience with Haskell? And like supposing you had Haskell on the JVM, what benefits do you think you can get? I just wanna hear your round of opinions, anybody? Yeah, exactly, so like, right. So like an issue with putting a Haskell project in an existing project is that it compiles to native. So in order to make it meld well with the rest of your system, you'll have to use like Apache 3 after, so many other inter-process communication methods in order to communicate with it, which you lose some efficiency in that communication. So what I wanted to do is like, remove that communication latency. So instead of communicating through some inter-process communication, you just rewrite the entire Haskell runtime on the JVM. So now once we have Haskell on the JVM, what new possibilities does that give us? One, so one of the biggest problems in Haskell is the fact that there's no cross-platform GUI, like the GUI library. And the reason for that is like, it's very hard to write native GUI apps. Like you'll have something for Linux, you'll have something for Windows, but you don't have one uniform thing to communicate across all of them. But Java gives us a cross-platform solution, like Java FX is also swinging and all those. But since Java FX is the most recent one, I've been using that. So another thing you can do is build FRP library on top of that, how many you've heard of FRP? So yeah, so it'll give us a nice cross-platform FRP framework, like it'll solve that problem we've been having in Haskell for a long time. And yeah, you can also build games if you have the thing of both. And another cool thing is being able to program Spark jobs, Hadoop jobs inside of this. Like normally you'll be confined to Java. And obviously Java's error-prone has so many side effects as we talked about this morning.  So just like a couple weeks back, I implemented a feature to be able to export a Haskell function to Java. So like, let's say you have Haskell function that takes an integer and returns, say returns another integer, say something like the factorial function, just for example. So what that feature allows you to do is be able to export that and be able to call that as a normal Java function. So what that generated function does is it initializes the runtime system of GSCVM and then it allows you, it does all the conversions necessary to convert from Java types to Haskell types. And then it converts back from Haskell type to a Java type. Okay, so another cool thing we get access to in the JVM that I don't think people have tried that much is hot code reloading. So people familiar with closure would probably be familiar with that. So it's still like something that's not well researched but it's something you can try now because the JVM has like this inbuilt dynamism because you can load classes at runtime rate and create class at runtime. So hot code reloading would be so much like several times easier to implement on the JVM as opposed to say on native like GSC. And yeah, the biggest point, you get access to like the entire Java ecosystem using this within Haskell. So I think, yeah, so what's GSCVM? It's just Haskell to JVM compiler that supports GSC Haskell, specifically 7.10.3. So that's like almost like that's a second oldest version. Right now we're at GSC eight. The version just before that is GSC 7.10.3. So this supports like all those modern features like what type family is all those things. So we already attracted some contributors. So Brian McKenna, the guy who gave the talk this morning. So he's contributing very nice bug fixes and a lot co-shared. He gave a talk of machines this morning. He's also, he provided the foundation for the library I use in Haskell to generate the byte codes. And then Siby, he's right here. So he's been helping out maintaining the infrastructure and everything. And Christopher Wells, he's not here. Okay, so the main goals of this project are to maintain compatibility with GSC Haskell. So the reason I say GSC Haskell is that there's competing implementation to what I'm talking about. There's a thing called Friga. I don't know if you guys have heard of it. So that is like a subset of Haskell that compiles to the JVM. So that's why I emphasize GSC here to emphasize that it's a Haskell that GT compiles. So that's a major goal. And the reason why that's a major goal is that not only do you get access to the Java ecosystem, we get access to Hackage, the Haskell ecosystem as well. So this gives us, so this project allows us to use two ecosystems simultaneously, which is pretty cool. So another thing, as far as I've explored Friga just a little bit, but I noticed that the foreign function interface, the way you interact with Java method inside of Haskell is a bit complicated. So I have introduced some new ways to make it easier. And then another goal, for those who know about GSC, GSC is like a 25, 24, 25 year old research project that's actually gotten into industry, which is pretty cool. It's in the unique position of doing that. So another problem there is like, they emphasize implementing more advanced type system features more than like trying to optimize what they already have and make it faster. So there's also a gap there. So I wanted to fill that gap as well. I wanted to make this completely industry oriented, meaning I felt that was fine. Whatever GSC 7.10.3 had to offer to the table is pretty good. Like you can write really cool programs with that. So I wanted to take that as a base and then extend it from there. So I'll discuss what my future plans are in that aspect at the end of the talk. So now this is a comparison. So GHCVM is compatible with Hackage. I'll give a link at the end of the talk where I show all the packages that are compatible right now. So Friga is not, it is somewhat compatible with Hackage. I won't say it's complete not, but there's a lot of, because it doesn't have all the features of GHC that are used in the libraries in Hackage, you can't actually just compile out of the box, but now you can with GHCVM. So you can also interact with Java libraries. In GSC, you technically can interact with Java libraries through JNI and stuff. One company has done that with interacting with Spark using JNI, but it's not, it's very difficult to do. You can do it, you can just easily merge in any Java library you want. You could be like an expert almost. So all of them have like a basic level type system that basic level type system like parametric polymorphism type classes, those basic features that were there for a long time. And then it also has access, as I said, because it supports 7.10.3, it has access to all the advanced features that have been coming out in the past couple of years. And as of now, we don't have support for template Haskell because that requires the implementation of the interpreter. So the equivalent of GTI for GHCVM, that's not done yet. That's a to-do item. So another major difference is the way concurrency is handled. I'll mention that in some time. So how did it start? So I started playing with Haskell about four years back and I was just trying to solve like simple mathematical problems on Project Oiler. So I need to start on Python and then the solution didn't come out for some reason. It took forever to run. And then I just re-implemented Haskell at the time it took up when we learned and suddenly it worked. So that was when I got the, oh, wow, this is magic moment. So how many of you actually think Haskell is magic? So, and you'll get to see, today I'll discuss the execution of a simple program so you get to see how much work is actually going on to get that magic to work. So then I took some deviation to do lots of Android programming. So that's when I got access to the Java ecosystem. So I understood what are all the problems in the Java ecosystem. So then I also was just a hobbyist Haskell. I would read all these articles. The thing is Haskell has so many features and like it's almost overwhelming. You feel like you have to learn everything but then later as I moved on I learned you actually don't need to learn all those advanced features.  And so about one year ago like I got reached my saturation point in Java. I'm like I really just want to work in Haskell. I've also worked in lots of startups. So in those startups I was developing the back ends and working with Android apps. So I had to use Java, I had no option back then. But yeah, so I was starting to get the idea of okay I really want to use Haskell for mobile and like all these other things. That's where I got the idea, okay I need to somehow get Haskell on the JVM. So that's one thing. But back then what I wanted to do was I wanted to create a DSL that cross compiles to like iOS, Android and Windows. I don't even know if that's worth it but yeah. So that was the goal back then. I just want to create a DSL. I don't want to directly compile to Java. But yeah, this turned out. And then another major thing that influenced JVM was my time with closure. So I spent almost six months working in closure. So it was a great language. And what I loved about closure was like the ease of being able to import Java functions and everything. But the only thing I missed from closure was the type system. Everything else was amazing in closure. So then once I reached my saturation point of closure as well, so I was like okay maybe I should start getting down with this Haskell to JVM compiler. And so what I did was I started reading lots of research papers. So compiling Haskell to JVM is not a new idea. It's been researched and people have written papers on it. Like back in the 1990s and 2000s. So they were papers but they weren't completely conclusive. Like they all determined okay, like it's inefficient to do this. It's not worthwhile to do something like this. So and I agree like maybe back in those times back then Java was still like very primitive. I don't think they even had a proper JIT compiler back then. So like it was extremely inefficient to import Haskell back then. So but now Java has come a long way since then it's been a decade and a half since those papers were written and lots of developments have been made. Now Java's used everywhere. So now I felt okay maybe this is the right time to work on something like this. So another major motivation for this was I wanted to use Haskell in my startups and one of the things I didn't want happening was I didn't want to like suddenly have a bug in production like a compiler bug and then having to wait on the GSC people to get it done. So if you guys I think I mentioned just now GSC is a volunteer project. So there's no people completely committed full time to maintain it. So that's actually a bit of insecurity for me and I'm not just for me I'm pretty sure for a lot of other people who actually want to use in production. So I wasn't, I didn't like that as well. So I felt the best solution if I wanted to actually use Haskell was to learn GSC completely. So if any problem ever came up I'd be able to deal with it. I'm sure not everybody comes to that solution but yeah. So I think I talked about this lack of libraries. So like just Hackage is developing pretty well. There's lots of libraries but the libraries we need for day to day use there's still a lot of work there. And documentation is a huge problem as well. Like it was just a lot of people because they say types are descriptive that won't even bother documenting. Types are descriptive but they don't subsume documentation so. And nothing was cabal. So actually one of the reasons why it took me so long to actually even write one line of Haskell code was because of cabal. Like I was just trying to compile sample programs and what happened there happening was I would get that dependency failure, dependency resolution failure and then I'd be like why do I need to waste my time with this, I have so many other things going on. And after stack came out that's when I started becoming more active in Haskell. So now I'll talk about how GATVM was architected and how the commons work together. So GATVM consists of many components. Like this top half, the top half is all from GHC. So I haven't done that, that's been already done. And so it starts with the driver. Driver is the one that manages the compilation of different components. Like I had to modify that to also compile Java files. So as of now you can actually compile Java files and Haskell files both with GATVM. So and then once the driver determines what the component to compile is, it'll send it to the next part of the pipeline which is partial type checker optimizer. So that part I want to discuss because I haven't done much work on that. That's already been done by very smart people. And it works very well actually. That's why Haskell is pretty fast these days. And then so the output of that entire process is a thing called SDG code. I'll explain that in a couple of slides. For now we'll just leave it. It's just the output of GHC. And so the code generator, this is completely what I had to do from scratch using the GHC code generator as an inspiration. So what the code generator does is it converts this SDG code, this low level intermediate representation of Haskell to a class file. Actually not just one, they'll convert to many because of how the implementation is. And then we'll wrap them all up into a jar. So almost every Haskell module you'll write in a project will compile it to a jar file. And then it also takes care of at the end when you want just one single Uber jar, it'll link all of them together into one giant self-contained jar that contains the runtime system as well of the RTS. So I also wanted to take a minute to explain how Cabal VM worked. Cabal VM is the fork of Cabal that's patched to work with GHC VM. So one of the things I had to do in order to maintain compatibility with Hackage is I had to patch some libraries because a lot of the core libraries in Haskell, they use C functions. So in order to make those work on the JVM, one option is to compile everything in JNI which is probably not a portable solution. So instead, I just rewrote all those CFFs if I call them into job. So now I need to somehow tell Cabal that these changes are there because obviously I can't sub-bin option patch because this is unrelated to normal GHC. It's specific to this. So rather than interfering with the normal GHC process, I decided to make my own repository that contains a set of packages, not packages, patches. So these patches will be pretty small, maybe like the diffs will be like what? 20 lines, 200 lines, depending on how many CFFs there are being used. So now what Cabal VM does is it consults this repository and if you're trying to install a package which has a patch in this repository, automatically patch it and then it'll build the patched one. So using this method, I was able to actually get access to a good chunk of Hackage. As of now, we've compiled a good number, maybe like what, close to 20, 30 packages. So it's pretty nice. So yeah, so GHC VM Hackage is like this layer between Hackage and Cabal VM. That it acts as like a filter. Okay, so I'm going to, so now I'll discuss the runtime system and I'll explain it by showing a very trivial Haskell program and showing how it works. So before we get into that, I wanna take some time to explain lazy evaluation. How many people are comfortable completely with lazy evaluation? You'll understand all the quirks and everything. Okay, good. So this will be useful to a lot of people then. Okay, so this is a very trivial way to distinguish between lazy evaluation and strict evaluation. So according to Wikipedia, it's an evaluation strategy which delays the evaluation of an expression until it's value is needed and which also avoids repeated evaluations. So that second part which says, which also avoids repeated evaluations is probably the trickiest part of one of the trickiest parts of implementing laziness on the JVM. In general, actually. So here there's two code samples. One is in Haskell, one is in Java. So I tried to make them as similar as possible. In Java, there's no generic exception thing. So I had to improvise. So what's happening is you have a list of two elements and undefined for those you don't know, it's a value which upon a value, if you evaluate it will crash your program. It's almost like you can think of it as a result of a function that throws an exception or something. So somewhat similar in Java is, so I just initialize a null string and I'm calling it, okay it's not get length, it's actually length of my bed. So basically I'm trying to get the length of the string which is null. So in Java this would actually crash with an exception right away with a null pointer exception if you executed this. Why? Because Java evaluates every expression.  So it doesn't go any further. But if you look at this example, this example will actually run in Haskell because Haskell is lazy. So what does lazy mean? Lazy means that the evaluation is delayed. So this two and this undefined are not evaluated until they're needed for some purpose. So head, what does head do? It evaluates the list and gives you the first element. But let's assume this is the only program. Let's say the old program was printing the head. So you never care about the second element, right? So why should a program crash if you never actually use the second element, right? So that's a capability you get from lazy evaluation. And because of the lazy evaluation you can do lots of matrix. So now I mentioned SDG code before. SDG stands for spineless tagless G machine. This is an abstract reduction machine that was written in a research paper by Simon Payton Jones a while ago. So this is actually, this mechanism is the reason why Haskell is as efficient as it is today. So this sounds fancy, like SDG code, but it's actually just a reduced former Haskell where all you have are just cases and lets to make it very simple. So in SDG when you look at the code, to give you, so one thing it's very tricky to do in Haskell is try to actually execute in your head.  When you go to a Haskell program line by line, you can't do the exact same thing. So I wanna help you guys visualize it a bit better. This isn't perfect, but it's a bit better. Then A normal form, it just means, okay, everything is simple. You can't have complicated expressions. Everything is bound to some variable. So another part of the SDG code is function applications, primitive operations and literals. So primitive operations, these are the things that you can't implement in Haskell that have to be implemented at the runtime system level. So an example would be integer addition. The runtime has no idea how to add integers actually. It just knows how to, the only thing the runtime knows how to do is delay evaluations. All it knows how to do is delay them, unbox things, box things, that's it, but it doesn't know how to do the little operations. So you have to use primitive operations to do that. So I'll introduce a very simple example. So the final program on compile is take two of, map times two of a list going from one to five. So this looks deceptively simple. Well, the answer to this is, it should return a list of two comma four. But what exactly goes on in getting this to evaluate is the interesting question. So first let's take a look at the definitions of map. So these definitions are a bit flawed. So first let's take a look at map. So everybody's familiar with map, right? It's like the bread and butter functional programming. So it's a function, it's a function that takes another function that'll transform a list from one type of elements to a list of another type of elements. So the standard we have anybody, and you begin to redefine it, it would be okay. So if you do a case-by-case analysis, so a list can only have two possibilities. It can either be empty or it can be broken down into two parts. So if it's empty, then obviously, if you have an empty list, there's nothing transformed. So you switch to an empty list. If the list has some elements, then you destructure it. So you destructure it, you apply the function on the first element, and then you recursively apply map on the rest of the list. So now that is like the normal Haskell implementation you would do. So now this is actually what it would look like, roughly it would look like this when you compile it to SDG. So as I said, SDG is just a simpler version of Haskell that just has cases and lets. So this is actually, the example you see here is equivalent to this. So what it does, so case is you can think of as the primitive in the RTS that says evaluate this, evaluate whatever is inside the case. So in this case, first you want to evaluate the list. You want to see whether it's empty or not. So if it's empty, return empty otherwise. So now you see a let. So what this does is, when you see a let in SDG code, you should think of that as allocation. So anytime you have a let, it's allocating a new thing called a thunk. So a thunk is a suspended, it's like an expression that hasn't been evaluated yet and eventually needs to be evaluated. So I could have shown you guys actual SDG code, which is there's an option in GHC you can send a D dump SDG. It'll give you SDG code, but it's ridiculously hard to read because it has all sorts, it uses all sorts of randomly generate names. So I had to make it, I did a manual compilation for you guys so you could, it's easier to see what's going on. So what it does, it'll create a thunk and then it'll construct a new list with the transformed element plus the thunk. Now let's look at take. So take is a teeny bit more complicated because you have an extra thing where you have to check the base case. So in the base case when it's zero, you should return it. When there's nothing to take, you should return empty list. And then in the false case, if it's not zero, then you evaluate the list, break it up, if it's empty, again return empty. If it does have some elements, then recursively call take with n minus one and then with the rest of the list and then reconstruct the final thing. So here you're doing two allocations. You're allocating a box for n to store the value of n minus one and you're allocating a box for x as double prime. So now you can see where the allocations are happening, where the valuations are happening. That's what STG code does. It's like a, what's up? But there is an allocation actually. When you, there's an implicit allocation when you reconstruct any data type. That's also allocated, my bad. Actually, this is not correct. I should have added an extra let. Thank you for catching that. So this is actually, that was improper at STG. So there we go. So this is actually how it's supposed to be. Thanks for catching that. So yeah, there's two allocations here. And then you bind them together. So this, so there's two ways to allocate at STG. One is to use a let statement. Another way is to construct some Haskell data type. So yeah, similarly in case you have two allocations and then an allocation at the end. You can think of it like that actually. So when I speak of allocation, I mean data, new data is being used. Like a new, yeah, some RAM is being blocked. Yeah, exactly what I mean. Huh, actually I'm going to explain that a little bit. The reason why I'm explaining all this at the very low level is so you guys understand how to debug space leaks at some point. Because you'll understand where, how to indirectly see when there's a space leak. Actually Neil Mitchell recently gave a good talk about detecting space leaks. So I'll give like, I'm basically giving the background of that talk. Like while you need to know and understand. So that's the program. So now we've broken down map and take into their very low, their most low form. So now before we get into the runtime part, let's just take a look at how the evaluation will look like. So the specific example we have here is take two of mapped times two, one to five. And for those of you who know Haskell, there's a lot of syntactic sugar here. Actually one of the function that lists one dot dot five is actually not a list, it's a function. So for now we'll ignore all those extra details. We'll just make it simple. So now let's look at the definition of take. So what does a take do? First thing take does is it evaluates whether the expression n is double equal to zero. So that's, you can substitute this as Brian mentioned this morning, referential transparency. This thing I'm doing right now you can do it in other languages. This thing you can do in Haskell though.  So obviously that's false. Again, for double equals there's a trick there because it's a type class function. There's actually more going on but I'm ignoring all that for now. So just assume it's just like, it's a direct function that gives you the result. So double equals to zero is false, right? So now let's look. If the evaluation returns false, go to this branch. So that's what the evaluation returns to. So now you have something more complicated. So now access and take is now map in this case. So now I have to evaluate that. So now I have to evaluate that, get the result and then I have to remember the result for later. So anytime you have to remember something, you have to store it somewhere, right? So we're going to say, we're going to store what to do with the continuation. So what to do after we get the result of this map expression? What do we want to, the function that says what to do with the continuation will be stored as a frame, stack frame. I'll explain that in just a bit. So that's what this plus zero means. Plus means I just create a new stack frame of a zero index. And then the next part is, now let's say you got the result of map. So the result of map will look something like this. It'll be times two of one colon map F two dot dot five. So what that means is it's taken, it's stripped off the first element. It's applied the function. It hasn't applied the function to it, if you noticed. This times two is still there.  Absolutely nothing will get evaluated until the very last moment. And that one fact is why you get space leaks. There are times where you want this times two, one times two to get evaluated right away before carrying it through all the way down. So as you observed that that's there. And then map F two to five. So if you look here. So that gives you a value of some map. So now you look at, so now it can be deconstructed if you look as a colon, right? That means it has two parts as a head and a tail. So now we deconstruct it. So this X is now times two applied to one. And this XS prime is map F, map of the rest of the list. So now what happens, we do two allocations. We allocate a slot for N, which is the N you pass into take again. And then the slot for the workers are called to take. So now this returns a list, a newly constructed list. And eventually if you continue this process, eventually you'll get two to four. And another thing is this expression by itself does nothing because nothing is forcing it to evaluate. You guys have to assume that you're printing it. So when you print something you need to evaluate everything so you can, you know what to print. So that'll force the evaluation of everything. So now that's like a basic idea of how the lazy evaluation works. And now we'll get into a new degree of details. So now take some time to explain how the GACVM runtime system works. So what it does is it'll generate a main method for you, classic Java main method. And then we'll do is it'll do initialization of the runtime system. And then it'll go into Haskell world. So you see this border, this is intentional. It's to show that there's two worlds here. There's Java and there's Haskell. So right from the bat, right off the bat you'll initialize a runtime system and then it'll get sent to Haskell world. So by the way, everything I'll be explaining to about how the runtime system works is exactly how it works in GHC. So you can actually, whatever you learn here you can apply to any development you guys do in GHC. So what are the different components of the runtime system? So if you see here, you see core. So what core refers to is the processor of the computer, of the underlying computer. So you can have a computer with multiple cores, right? So on top of each core you'll have an abstraction called a task. So a task is just some data structure in the runtime system that has a one-to-one correspondence with some physical processor. So it's a way of abstracting over the processor in the runtime system level. And then you have a thing called a capability. So what a capability is, is something, it's again another data structure that keeps track of all the Haskell expressions that need to be evaluated and all the threads. So for those of you who are familiar, Haskell threads are green, which means that they're very light-weight and create like millions of them, just similar to Erlang processes. So in order for that to work, you need a capability to manage these threads. So the goal of capability is to keep all this information like what are all the threads that have to run and what code do these threads have to run and when should I contact switch these threads? When should one thread stop executing and go to another thread? So capability will run one thread at a time, one green thread at a time. So now capabilities and tasks are also in one-to-one. So you can have, so let's say you have N cores, you'll have N capabilities as well. Actually you can have less depending on how you configure the RTS. So yeah, so the next thing below, so as I said capabilities organize what are called thread state objects or TSOs. So those are the threads as I mentioned. And then inside those threads, you'll have the stack of the thread. So this stack as I mentioned before, you need it for doing lazy evaluation. So this stack will tell you okay, this stack will tell you what to do next. So anytime you're doing an evaluation, let's say you've finished evaluating like you've gotten to the point at which you can start that list. It's in weekend normal form, that's what it's called. When it gets to that point, you want to know what to do after that, right? So the stack frame is like the memory that remembers what to do after you've finished evaluating whatever you have to evaluate. So there are actually many other frames. There's frames for exceptions to be able to know, to catch exceptions and stuff. There's so many other stuff but I won't get into any of that. We'll only be discussing one type of frame today which is the update frame. This is the frame that takes care of this one part of lazy evaluation where it says which also avoids repeated evaluations. So how do we do that? We need to remember the result, right? So we need to override the thunk as I mentioned before with the value that it evaluated to. So that way if the thunk is used in multiple locations you just use the evaluated value rather than evaluating it again which goes against lazy evaluation. So here's the basic hierarchy. So when you have a Haskell function it compiles down to a subclass of stgclosure. So stgclosure is like the superclass of any object used inside of the gsvm runtime. So these are the four main subclasses. These are like the categories of Haskell objects in the runtime. stgfun is a function, Haskell function. stgpap is a partially applied, partially, I don't know what the second piece. So it's basically a partially applied function and then stgthunk as I mentioned is a suspended expression that hasn't been evaluated yet. So the thunk will contain code that builds the expression when it's entered and then it'll also contain code to override itself when it's done. So once the thunk overwrites itself it'll be one of these stgfun, stgpap or stgconstructor. So stgconstructor or the version I put here, this is the superclass of all Haskell user defined data types. So when you have lists, when you have bulls, everything, the superclass of those types is stgconstructor. So stgthunk will evaluate to one of these three eventually. So now I'll be showing, so I'll quickly show they, okay if it's five minutes I probably won't have time to show this. In that case I'll just go to, so did you guys at least get something from how lazy evaluation works? Like is there any questions you have about that? Thunk would evaluate to one of those three. So thunk is a suspended expression that has to value to something, right? Because Haskell- Function is made out of thunks, right? Yeah. A function can return a function. So this thunk will evaluate to a function. Yeah. In that case your outer function is a thunk and it will evaluate to, it will get stgthunk. Stgthunk will evaluate to stgthunk.  So let's go back to expressions. So I'll classify these now. So map itself is an stgthunk. But you see this expression here, take two map of this. This entire thing is a thunk. This entire thing is a thunk. This sub-expression map, this map times two, that's also a thunk. So a thunk can be composed of other thunks. A function doesn't evaluate to more thunks. It creates thunks. So when you execute that function, it creates more thunks that eventually have to be evaluated. Good? Okay. So in force, I'm out of time, so I'm gonna skip to the end. I will, the other stuff I had prepared was like where I hand-compiled these two functions to what it looks like in GATVM. So unfortunately, I don't have time for that. I'll just upload it and you can find my GitHub probably. So now I just wanna spend the last few minutes talking about where this is going. So first step I wanna introduce Type Lead, which is a startup I'm working on. I want to commercialize the work that's going on here. I wanna provide commercial support for GATVM. But another announcement I wanna make is that I actually wanted to create a new language entirely, which is branched off of GSC 7.10.3, which is focused on adding all those features necessary to get this into industry. So one thing I had discussion with some startup where they discussed a problem with records, Haskell records, so things like that. So any major problems that are actually acting as a barrier for it to be adopted, those things we'll be working on. So one of the solutions to that record problem is prototype polymorphism. I think, Brian, you've implemented this, haven't you, and Roy, so that, and we also have a focus on enterprise libraries. So as I mentioned before, Hackers is great and it has lots of libraries, but there's still a lot of gaps in terms of proper database access libraries for all the different databases and all that. So in this company, we also want to create really nice courses to teach this language to people. So you guys can think of this as the, what do you say, the implementation of Haskell that's completely focused on trying to get into industry. So I also would really love some contributors. So right now, you know what, I'll show a quick demo. So this is a FFI example that, this is how FFI looks. FFI is foreign function interface. So this is how you'd call Java methods.  So here you declare, okay, this Haskell collection type corresponds to Java dot utility collection and so on. So these are functions to import certain methods. For example, if you want to import the add method and the get method and so on. So I'm sorry for being quick, but I don't have time. So this is a simple example. So what it does is I've created a monadic interface to interact with Java functions using a thing called a Java monad. So in the Java monad, the first argument will be. So in Java, you have a concept of this, right? So the object you talk about now. So I've managed to find a way to embed that same concept inside of Haskell using monads. So you don't have to, in this case, so you can actually call functions on an object without actually using this, without actually mentioning the object itself because that's threaded through the monad. So you can generally, you can think of the Java monad as a state monad, but it's a very special monad that's recognized by the compiler that'll do the optimization is to make it at least somewhat efficient. So what this does is all it does is just, it takes a lazy list, it converts that to an ArrayList in Java, and then reads from that ArrayList and prints stuff out. It's just to show you can create an ArrayList from GSMM and then come back. So let me run this real quick. So as you see, so it printed out exactly what it's supposed to. So what the program did was it called pop, so it called populate array 10. So what it'll do is it'll create an ArrayList that contains the numbers from zero to 10, and then it'll print out the values in the ArrayList. It'll read from the ArrayList and then print it back, all within Haskell. So the key part here is that you're not ever actually calling Java. Actually, the only part you're called Java is when you want to read from the ArrayList. Obviously you can't do that in Haskell exactly. But the point is you never had to write a line of Java code. All of this is within Haskell only, and it's in a nice typed monadic interface. So if you see, what I did was here I called, so what I did was I created the integer, integer objects wrapping the Haskell integers, and then I multiplied them by five. So when you multiply the numbers from zero to 10 by five, you'll get a result like this, zero, five, 10. So yeah, so I could, if anybody's interested in contributing to this, making this evolve, like we need help porting package libraries, we need help writing pure wrappers around important Java libraries like JDBC. JDBC is a biggie that is used a lot. And then we also need a Java FI generator. So you saw the FFI I was just showing. So it looks pretty complicated, right? So it looks pretty complicated, right? Like in a lot of this can be machine-derived, meaning a program can just read a class file, Java class file, and figure out how to generate these signatures. So it shouldn't be something you have to write yourself, right? So it'd be cool to have some program that can just take a list of all the methods you want to import, no, I might be generating the signatures for you. And then ID support. So the work is being done on this, but it's been delayed, like, there's a plugin called HaskForce that it's a plugin for IntelliJ that works with Haskell. So I'm working with the maintainer of that to get this working for JCVM as well. So you have a nice ID to work with. So that's it. And you can contact me through any of these methods. There are a lot of foreign-industrial usage, a lot of stuff is missing from regular plain-over GNC. And you're trying to fill in the gaps. Do you have like a quick, or can you share a quick list right now? What do you feel are those gaps? So I actually don't. Once my work has so far has been just trying to get this thing to work properly, that's what I have to work on the next month or so. Just figuring out where all the gaps are. I think you're serving on the correct. So you've already started something about this, about how to standardize the web application development in Haskell. So I wanna do something similar to that for like all the major things, like being able to create data pipelines, data pipelines involving a doop and spark without actually touching a doop and spark within Haskell. So there's many ideas I have, but right now it's not complete plain-out yet. I sort of agree to that. I've been focusing on the web app side of the gaps, right? I'm sure there are gaps in other things as well. But why try to fill in those gaps after porting GHC to Java? I'm moving on to the JVM. So one in the JVM, like you have like a ton of libraries are already available for you. So once the Java FFI is in place, it'll be easier to speed up the process essentially. Like in GHC, the best case you have is you have to write C functions, which not everybody these days is comfortable with doing. But everybody these days can easily write Java functions, right? Java's taught everywhere. People are familiar with writing Java functions. So it'll be much easier in that aspect. Yeah, that's the point. But eventually you need to do side effects, right? And you need to call, if you look, even if you, so you said you shouldn't have to like write another language, right? If you look at the core libraries of GHC Haskell, it's all like really, really low level stuff. Like I've been porting it, so I know it. It's very, very low level stuff, like copying memory from one place to another. Very low level stuff is happening and they call C functions for that. So I want to make that easier instead of C, Java. You can do that same low level stuff in Java now. When I was, yeah, there's, I don't have an answer to that question, right? So I haven't thought through it completely, but I have given a basic thought. So the main thing is, as long as like, the changes you make to that function that you're reloading don't actually, like the types are just a way to protect yourself from shooting yourself in the foot at compile time. So when you get to the runtime phase, the types don't exist anymore. They're not there. All you have are the SDG closure I told you. You just have those, that's it. So you don't have any notion of types there. So as long as like, so yeah, that's something we have to think about, but I would think as long as the type hasn't changed when you change the function upon reloading, as long as it's the same, I'm pretty sure as long as you change just the implementation, I don't think it will make a huge difference. Again, that's just what I think might not be true. Thank you.


This is the SF Productions podcast network We used to tape shows. Let me see. There's a tape already in here. Let me hook this up here. Let me see what we got. Back with us to the 60s and 70s, the dwelling place of the lost generation. An era whose heroes, role models, and very lives were molded and formed by weekly installments of favorite television programs. Welcome to the place your parents didn't understand. Welcome to the vast wasteland. Welcome home. Another exciting episode of Vast Wasteland. I'm your host Mark Schmidbauer along with Wilbur Neal and Marty Wiley, and we're here to talk about 60s and 70s television. Before we jump into today's exciting episode, just want to tell you we're on Tuesdays at 6, Wednesdays at 10, and Thursdays at 3 here on ACTV Gable 21. Also, for some reason if you want to write into us, our box number is 151526 Columbus, Ohio 43215. Well, this week on Vast Wasteland, something very exciting. It's our first actors retrospective show, and we couldn't be more happy and pleased. And for our first actors retrospective, certainly a guiding force, one of the hardest working men in 60s and 70s television, Bill Bixby. Bill! Yes, Bill Bixby today on Vast Wasteland. Certainly a man of many talents and many credits and lots of shows, and we're going to go through him starting with certainly his first starring role. Let's talk about that, Wilbur. Well, let me just go back here a little bit. Now Bill's first big break in Hollywood wasn't quite what he expected, because he was a struggling young actor in the 50s. Then he was working part-time as a lifeguard, and a Detroit auto executive recruited him to travel to Midwest for his first screen roles in some industrial films. And so then he went on from there, and he went on to the West Coast from there, and he did some small parts, and he did some small parts in things like the many loves of Dolby Gillis. But even before that, he was an actual regular from 1952 to 1960 on a game show called Masterade Party. He was listed as a regular panelist for that show. No, but according to my information, he was on the 1975 version of that show, and not the 1950s version. I thought he was in the 50s version. Well, let's check there. Let's check. Actually, it wasn't his first starring role actually on Joey Bishop. That's right. That's true. In January of 62, he landed his first continuing role as Joey Bishop's boss on the Joey Bishop show. He replaced another actor who was fired in the middle of the season. And his big break, his first of three hit series, came the following year as a reporter on My Favorite Martian. But there is a sad one. There is a sad one. In 1980, all the copies were destroyed. Yeah, I read that. Joey Bishop requested all copies. This was really a bad show. So we've got some lost footage of Bill Bishop. The loss of Bixby tapes. That's sad. Yes, My Favorite Martian is probably the first big hit that everybody recognizes from. You can see that on the channel. It's on USA or some cable channel. 10 o'clock in the morning. TNT. I think it's on TNT. I don't know. USA TNT. Somebody showed it. It's a fun show. It's one of my favorites. And certainly it almost seemed to symbolize the really silly sitcom concept. This is true. Even more than Idiot sitcom. Right, even more than Mr. Redd or Bewitched. It truly was just a completely ludicrous concept. You've got a reporter, he's young, he's ambitious. He has the hottest possible stories. He knows a Martian, he's got the evidence. No, he doesn't bother telling anybody. Because he's his buddy.  That's right. Well, I think journalists were different in those days. But even so. They had something like scruples or something. Yeah, something like that. Rubbles? What are those? Journalistic scruples, my goodness. Sounds like a breakfast cereal, doesn't it? But along that same time is when he also popped up on Doby Gillis. I've caught a couple of shows. Well, during that time, he was on a lot of stuff. I'm sure, because he did Twilight Zone, I'm sure. Everybody did Zone. Twilight Zone, he was on, in 1963, in January 1963, the title was The Thirty Fathom Grave, and he played the Officer of the Day. And the more exciting parts you couldn't have. It was a speaking role, come on. Okay, well. Yeah, I think you're not a true actor of the 60s, 70s, if you didn't do Zone. I know. Either Zone or Gallery, pretty much. Gallery. Yeah, you've got to have Outer Limit, one of those. Outer Limit, you've got to have something like that, or even Alfred Hitchcock. That's right. Any one of the three, or maybe all of them. Yeah, all of them. If you've done all of them, you get a gold statue of something, I don't know why. We haven't made that part up yet. And so he did the Zone. He did the Doby Gillis in about 63. That's when my favorite Martian hit and ran until 66. And he took some time off between series. And then we got one of my real favorites after my favorite Martian in 69, the courtship of Eddie's father. Oh, yeah. Eddie's father. Which I almost think is like the first warm-ity. It's real close. It's real close. Yeah. I mean, it was touching. It was a favorite of mine, really. It just had a charming cast. Gee, Dad, if you ever get married again, you're gonna have to get dressed up and stuff. Could I be just like I am? Yeah. Just like you are. Boy, that's a relief. He's my best friend. Da-da-da-da-da. You did that. You did that. Harry Nielson. Yeah, there you go. Did Harry Nielson do it? Yeah, it was like cool music. People let me tell you about my best friend. He's a wholehearted person who loved me to the end. That's a show. That's a show I'd like to see reunion of. Yeah. Well, there was one. There was one at least being produced or being written. And I mentioned this on an earlier show about the fact that they were supposed to do one. And I saw in some talk show, Brandon Cruz, they had, oh, yeah, it's being done. And they were like in production of it. And it's been shelved somewhere. Oh, that's too bad. Because I really thought that was... Let me just go home. They're on their own. Yeah. Oh, there we are. Uncle Norman. I would love to have Mrs. Limmickston working for me. Wasn't she like the best housekeeper? Sure. Housekeeper's Hall of Fame. Oh, yeah. Mrs. Limmick, right there next to Hazel. Mr. and Mr. French, pretty much. You know, I think his role as Tom. It was Tom Corbin on the show. Yeah. His role kind of... It was a real positive fatherhood role. You know, he wasn't a scatterbrained, goofy father. Right. He was a real solid man. But he was still the swinging kind of bachelor guy. Well, it was a little boy. He was trying to fix things. Yeah, but see, it was still the... Yeah, it was a very toned-down version of that.  Well, hey, hey, you know, hey, guy. Yeah, that was Uncle Norman. That was Uncle Norman. Yeah. Because he was Mr. Hey. Hey. He was a photographer for magazine. Yeah, he was a photographer. That's right. He was a photographer. Tina was the secretary. Secretary. I was wearing the mod out there. He was always out there trying to find a new mom for his... somebody to marry his dad. Oh, my. He'd go to stores and hang out in the frozen food.  No, he was. There was really a decent shot. I guess it was about the same time as what Julia was on or something like that. You know, Tom and Julia should have got together. Wow. You have Corey and Earl J. Waccador. Corey and Eddie would pretty much, you know... And then you'd have the first interracial marriage deal that would have been... Which was just now being done. Right, yeah. Right. True colors. Years before, it could have been an innovator, but... But in a way, it kind of was. Because I really think it paved the way for the idea of the warmity. Yeah, because it was always like... The happy comedy. But it wasn't, you know... It was a little kind of thing. But it really, I mean, it really, in a way, went back to the old shows, the old standards of... Making for Dad. Well, even before that, more of an Ozzy and Harriet thing. But it was a single parent, but it was still the whole idea of, you know, well, everything's lovely and everything works out. And there's never really any big problems, you know. So just find somebody for Dad to sleep with. Yeah, that was about it. Except they never said that. Yeah. Eddie's old purpose. Somebody to come over. Yeah. Come over for dinner. And also an early appearance of Jodie Foster on that show. She had a kind of regular reoccurring. She was Joey. Yeah. She was a little girl that used to slug Eddie all the time. Because she liked him. Because she liked him.  Well, how do we get any out of the house? Go see Joey. Little girl down the lane. You can come back about that, Alan. What do you say? It was surely a step up for Bill, for my favorite Martian father. Oh, yeah. It was a better show. I was expecting to see Uncle Martian. Uncle Martin pop in there somewhere. I was always waiting to see him pop in, you know. Just kind of pop in. Tim? Tom thought you'd get away from me. Yeah. Change of name. No, I won't work. Well, let's see. If Tim O'Hara had just gotten married right after the series, and you could almost figure it out. Or a relocation witness program. Well, yeah. They never showed the final episode where, well, they finally found out about Uncle Martin and said, well, you know, we're going to have to separate you two. Well, Uncle Martin didn't leave. Well, it was never seen, of course. Uncle Martin fixed his ship and was able to leave, but he didn't leave. It was a touching moment. I'm still studying those darn earthlings. Silly earthlings. No, he was a friend. You know, he considered Tim his friend. Okay. I've watched the show a lot. All right. Who was that that was always making brownies, lady downstairs? Mrs. Brown. Mrs. Brown. I mean, the brownies. That makes sense. It all fits in there. Well, let's move on then. He did a magician. There you go. 73 to 74. Neat show. Oh, yeah. Bill Bixby's actually an amateur magician himself. Yeah, that's what made the show. And then that would take place at the Magic Castle. Yes, quite a bit of it did. I thought I was real amazed by that place. That was neat to see that. Did he like travel around in that one? He had his own 747 or something? Well, he's a private jet. He had a private jet. But then he had a really cool car. And they showed her. That was in the title sequence. Wasn't the premise of that show he'd spent time in prison? For a crime he did not commit. And I know every one of those guys in prison, I know y'all didn't do it. I know you didn't do it. If not, how could you have all these fine shows with people who had crimes they did not commit? Right, right. No one ever commits these crimes. Not the stars. Not the stars, at least. He's a bad guy to do it. I think I mainly watch that show, though, for the magic, the illusion. Right.  And it's like, hey, look, there just happens to be a magic box over here. And something is like, I just happen to be on a stage or some sort of deal. Right over there. Hey, we got him now. Let's go get him. Where'd he go? Oh, Robin! And the bad guys applaud, drop their guns, and he can run away. All right, baby. He's got to drop your gun to applaud. Yeah. Well, that was really wonderful. Hey, wait a minute. A deck of cards! I'm Marshall Brodina, a professional magician. You can do these cards at home in your own time. Well, but he did his own magic. He did. He really did it. He did his own illusion. Go stand in. Actor, director, magician. Directing. Yeah, he did a lot of directing this time. Yeah, there's a whole big thing about directing. He's big on that. Well, we go on here, and indeed it does say that he was in the 1974-75 version of Mass Great Party. Okay, he wasn't in the early one? Not on the early one. Okay, I misread that then. Whip me. We don't want to get anything wrong here. Well, after the magician. All the people, well, maybe he was in the early one. Okay, I misread that then. Whip me. We don't want to get anything wrong here. Well, after the magician. Yeah. Well, maybe somebody will write us a letter that you were wrong. Yeah. It could be male. Whip. We won't beg for it. We'll just screw up and you can write us a complaint. We can come on the show and say we got a letter. Well, that was 1974-75 for that Mass Great Party. Then in 1976, he was in the rich man, poor man deal. 12-hour novel for TV. The first one. Yeah, I believe it was the first novel. Right. But Roots kind of overshadowed the whole thing. Yeah, Roots was, right. It hadn't been for that.  And Bill Bicks would play Willie Abbott in that. Yeah, not that we know exactly who the character was or anything. He must have been a major character because he was fairly far up in the cast list. Yeah, and plus I never saw Rich Man, Poor Man. It was either above my head, which was probably still in. The only person I'd never heard about really that people always talk about on Rich Man, Poor Man was the character that Nick Nolte played. I think he was in that. Well, anyway. Well, we have one here. This is really obscure. Bill did a pilot for a sitcom, which obviously didn't make it, The Natural Look. This aired July 6, 1977. The Misadventures befall the newlywed Harrison's bud, played by Bill, a doctor, and Edie, played by Barbara Felden, a cosmetics executive. The pilot depicts Edie's marriage, Edie's feelings as she prepares to meet Bud's ex-flame, a glamorous girl played by Karen Kay, who exhibits a domestic flair she feels she can't match. Now, why didn't... This was 1977. Now, and this was NBC. And boy, why didn't this make a series?  But the man didn't rest. That's the point. The man didn't rest. That's right. He went right on from there. But the thing is, all through the 70s, he was doing directing all over the place. I see a show here called Spencer's Pilots. He directed. This was in 1976. I've got to see some references for... Well, there's an incredible Hulk, but that's not what we're talking about here for the second. At least not yet. Not yet. That's right. Let's see. Operation Runaway, the Oregon Trail. The point is, he did lots of shows, because obviously, things weren't working out very well for him. And so he said, oh, what the heck? I'll go do some directing. Well, it's not. He obviously did very well. The acting thing wasn't working out. He wanted to branch out from that, as many actors do. They want to branch out from the acting. They want to get behind their camera. They want to get some other people. But he had the experience to do it. I mean, look, the man started out in the early days. Back in the early days. Oh, yeah. Truly the actor of the 60s and 70s. And turn on that TV, what? There's like maybe a couple of years in here where you could turn on the TV and not see Bill Bixby. At least not in the current thing. But you did get those reruns. That's indication. Hey. Once again, proves that Bill Bixby is the hardest working man in the 60s and 70s TV. But anyways, he was on lots of shows. I'm looking for another reference here. Well, we ought to move into the best known. I suppose. The one that people probably know him the best from, well, the younger people now. The incredible Hulk. Bill Bixby played David Bruce Banner. Doing the wonderful Metamorphosis into Loophering now. Originally called Bruce Banner. Just Bruce Banner, as he was called in the comic book. In the comic, right. But at the time it was felt by the network that it was too feminine a name. Ooh. All you Bruce's out there. Get upset right now. Well, yeah. Feel free to get upset because this is what the network felt. What CBS felt. Oh, that's too feminine a name. So they slapped David in front of it. Yeah, I used her name to my girl Bruce. Yeah. Well, that doesn't make any sense. But the thing was, I remember seeing a mad parody of Incredible Hulk. And just as they were explaining this, like a commercial in the background saying, and here is Bruce Jenner, Olympic athlete. You know, it was like, it just shows you how silly the network is on things like this. Anyways. Incredible Hulk ran from 78 to 82. Certainly, what's that? Close to his longest running series, I think. Just about, yeah. Yeah, I think so. Yeah. Well, the one, as far as ones he started. And he was. I mean, still today I think that's what most people identify him with. Yeah. That part is David Bruce Banner. Right. Well, hey, only because of the fact that that darn show doesn't die. Right. That's right. It's still on. It's still going on.  We've just, it's like, found out. The trial of the Incredible Hulk, the return of the Incredible Hulk. No, no, doesn't Bill Bixby right? Oh, I'm sure he does now. Oh, yeah. He's got the camera on that much. It's like, do-do-do, ooh, ooh, I'm getting, ooh, and then he's done. Oh, I'm so angry. All the action sequences, he's not even there. He can be behind the camera. Don't make me angry. You wouldn't like me when I'm angry. Err, err, err, the eyes go wide and then, you know, there's something wrong. Why is it neat? He starts busting his teeth. There's a question. How much did this guy spend on clothing? Yikes. I just wondered, that's something I always wanted to hear. Here he is. He's traveling around the country. Yes.  Living out of a roll bag. Yeah, he's got a duffel bag with a lot of clothing in it. Where does he get the money to buy all the clothes? And a couple of times, you notice he, no matter what, this is, and this is a thing that's also in the comic book, is no matter what David is wearing, and when it turns into Incredible Hulk, Incredible Hulk is always wearing jeans. Yep. It doesn't matter what, it's just like, it turns them green and it changes his pants into jeans. Powerful. I mean, from polyester into jeans. Yeah. It's all in the jeans, I guess, basically. Incredible. Science is amazing. That's right. That's radiation, by Golly. But this show is one of the, unlike a lot of shows like the superhero shows, number one, he couldn't control what was going on, obviously. And two, it was this very introspective kind of thing. Kind of like the stuff we're seeing now on Beauty and the Beast. Kind of, because it had to do this nice piano theme and it was, you know, it's like the tragic stenogothic story of this guy who turns into a green Hulk. I always got the feeling of incredible sadness from this show. Well, yeah. Because he could never stop, although he should have, because he was never going to get fixed unless he stopped and stopped at some decent scientific facility to hide him out. The reporter was going to find him. Yeah. The reporter, whatever his name, Darren reporter, but he went to the Marriott Hartley Institute a few times. Yeah. She about fixed him up. And then just into oh, no, no, no, no. And just when everything's working out, ooh, that darn Hulk comes out and smashes the machine. So he has to wander around the country again so she can make another machine to help him out. She always found him too or he always found her and it's like, well, I'll go back and give her another try. And sure enough, she's got another machine there. Well, those de-gamma machines, the de-gamma, the de-gamma machines, the de-gammarization. De-gammarize. It seems like the roles he's had have gotten more serious. Well, except, except for... Tim O'Hara was like a doofus, okay? He was pretty goofy. Well, except for his next show, this, this, the very short lived, the Book of Lists. Remember the Book of Lists series? The series of books, and it was just lists and lists and lists and lists all over the place. That was 1982. Yeah. Yeah. And it was so, it was like a, kind of like, I don't know, almost like a candid camera, real people kind of show where it was like, here's another list. Da-da-da-da. And, and billed real list or, or co-host. It was like, Steve Allen was a co-host and, you know, it was just like, and here's this list. Da-da-da. And it was like a half hour list. And of course, it was like, oh, this is exciting. I'll go buy the book. Thanks. The book was pretty popular. I still have my first copy. I think I do too. Somewhere. But this, this is just not something to work as a television show. It's worked for David Letterman, though, having lists on the show. The beginning of the top ten lists. Yeah. But look how, look how long it took him to hit back upon that idea to do lists or it took somebody to hit back upon the idea of doing lists. I mean, since it was, it was how many years there were looking at almost ten years? Right. Well, I can't say really ten, maybe a good six years old. That's right. Well, I wasn't counting. I'm sorry. Then we move on to his last big role other than the incredible Hulk stuff, which is still going on. Good night, Bean Town.  They weren't, were they? No. They would never were and yet everybody was convinced they were. But then that Married Hartley, I mean, they just linked her up with everybody. James Garner, they did. They named her Garner, Leonard Nimoy in the Star Trek episode. It had Married Hartley by golly. Good night, Bean Town. It was all right. It was okay. It was on for, what, it was on for a while. I think it's still in syndication. Somewhere, probably a lifetime It actually was, it wasn't too bad a show, really. I mean, it was just like, they were trying to do kind of a, well, it's another new show within a show kind of thing, like Mary Tyler Moore show, where they just, it was this guy and he's a respected anchor in Boston and this new woman co-anchor moves in, who just happens to move into the same apartment building he moves in. What a coincidence. It makes things convenient for them. Yeah. They're driving across town. And so they, and so they had, you know, it was like the witty banner kind of stuff, like Cheers, which of course was based in the same city. I was amazed. I guess if it had been on the same network, it was on CBS, I suppose eventually they would have had them dropping it on Cheers, like, That's what I mean, if it had been on the same network, like St. Elsewhere dropped in on Cheers, because they're all in the same town. Well, you can definitely say though that in 1962, until 1982, 20 solid years of TV. And I'm sure there is there's And have you noticed Bill Bixby still looks kind of the same. I mean, he doesn't really age. Ooh. I mean, he's mature. It's scary. The Dick Clark School of Nine. I think Bill got Dick Clark beat pretty much. Because look, we were seeing Dick Clark the other night and he's getting that crevice of a part in his hair. Well, that's true. I mean, hey, we don't know if Bill's wearing a wig or not. It's a good one if it is. It's like you could sneak into that dressing room and see Bill's ball as a billiard ball or something. Anyway, there we go. Stretching out and running up those crow's feet. Well, no, he hasn't, I'm not saying he has not aged at all. He's aging gracefully. Yes, that's the word. There's the term. Yeah, he's still a very handsome man. I mean, he's somewhere, somebody's working on another pilot for him because those incredible Hulk things aren't coming all that far between. Well, they're doing like one every year and a half. Well, no, about one every year and you really don't take a year to do one of these episodes. I mean, I'm sure he's doing some other, he's investing heavily in the stock market or something, you know. He's probably still directing, right? Yeah, he's doing another Bill Dixby series. Or even a reunion show. I mean, you've got enough here to choose from, Bill. We don't need any more Hulk though. No. Oh, the Hulk, the Hulk will keep going. Yeah, but yeah, we don't really need that. No, we need a big, we don't need another here. We got incredible, I mean, favorite Martian, a big favorite of that Martian again. You're real bitchy, Uncle Martin now. What do you want, Tim? Go away. Bit, bit, bit, bit, bit, bit, bit, bit, bit, bit, bit, bit, bit, bit, bit, bit, bit, bit, bit, bit, bit, bit, bit, bit, bit, bit, bit, bit, bit, bit, bit, bit, bit, bit, bit, bit, bit, bit, bit, bit, bit, bit, bit, bit, bit, bit, bit, bit, bit, bit, bit, for him too. That's right. Because, I mean, any channel you turn to, there'd be Bill Bixby. The hardest working one in 60s and 70 TV. Well, anyways, we're giving the signal to get out of here. So for all of us here at Bass Wasteland, we'll see you in three...


I started to realize that we weren't speaking a language that was youthful enough to reach the people or for them to even care about food. You know, and so in order to get the food to them so that they would wait in line like that, I had to break rules. I had to go against a lot of things that we believe in as chefs. And that's mixing technique with processed food. Mixing emulsions with canned meats. Mixing junk food with intense purees of organic vegetables. And like, and mixing those things together. Making it young, like streetwear, you know. That's taboo for us. You know, we would never open a can of canned green beans, you know, serve that on a dish in our restaurant. But see, like for me, the information was I had to do that because it's like when you get out of surgery, right? You can't just go straight into a meal. You have to kind of ease your way back into it. Well, you had communities and people that had this hunger that they couldn't just dip into the food that we were cooking as chefs. So I had to create some sort of a bridge. And then it changed the city. Then it changed the county. Then it changed the nation.