PurelyFunctional.tv: How did you get into functional programming?
Jason Hemann: I didn't get into programming because I wanted to make games or build websites, as I hear is common. I was interested in the math and theory of it. I was introduced to GEB by a high school philosophy teacher, and I was drawn to the sort of thoughts that it got me thinking. I was first formally introduced to functional programming in an undergrad course. And coincidentally enough, that class used Scheme and the Art of Programming, a textbook co-authored by Dan.
PF.tv: Very briefly, what is your talk about?
JH: We will, in real-time, implement a minimal logic programming language, shallowly embedded in a functional host language. In doing so we will explain the inner workings of such a logic programming language. We avail ourselves to only a small and fairly mundane feature set, so we hope our talk will be both broadly-accessible and widely applicable.
PF.tv: What do you hope people will take away from the talk?
JH: A new appreciation for logic programming, and a desire to try it out in their favorite language in which it is not already available. I see a microKanren implementation as one of those neat, pretty little functional programs that you just want to take home, code up, and play with. If we can convey that kind of aesthetic appeal, I'd like that too.
PF.tv: Do you really think you can implement a complete logic system during the talk?
JH: It's a tall order, but I think we can do it. We are helped immensely by "standing on the shoulders" of our host language.
PF.tv: Where do you see people using embedded logic systems in industry?
JH: I know of people using it for malware detection and generating semantic web queries, among others. A lot of these developers are using the Core.Logic implementation embedded in Clojure.
PF.tv: What is the weirdest language you've heard people writing a Kanren in?
JH: I liked Michael Hendricks's implementation in Prolog. I thought that was a super neat thing to do. Dan and I have implemented a microKanren in a miniKanren with a handful of symbolic constraints. I can imagine implementing a microKanren in microKanren + constraints, itself implemented in Prolog. That sort of deep nesting of logic programming makes me really happy.
PF.tv: What concepts do you recommend people be familiar with to maximize their experience with the talk? What resources are available for people who want to study up before the talk?
JH: There are a couple of places to go, depending upon where they're starting from. I think the meta-resource is miniKanren.org. Will Byrd has been keeping a catalog of implementations, papers, talks, and tutorials there. One can go for a pretty deep dive there. For folk looking to get ready quickly, I think the following list is sufficient: S-expression syntax, and a previous talk of Dan and Will's. Perhaps also Spivey & Seres' "Embedding Prolog in Haskell" to see some closely related ideas presented in a different way.
PF.tv: Where can people follow you online?
JH: I occasionally tweet from @jhemann. Just recently, a friend urged me to be more active on social media and in the blogosphere. More prompting is welcome!
PF.tv: Are there any projects you'd like people to be aware of? How can people help out?
JH: There's always more Kanren going on. The twin missions of building miniKanren relational interpreters for uncommonly-paradigmed languages and implementing microKanren in uncommonly-paradigmed hosts are great fun for me. I'd love help with a LOLcode-embedded implementation! I can haz LOLKanren, plz? I've also been jonesing for a nice way to combine logic programming with array programming (APL, J, something like that).
We're also working on formally characterizing some aspects of the basic miniKanren implementation and our symbolic constraints. We have just recently published a couple of papers containing work toward both of those.
PF.tv: Where do you see the state of functional programming in 10 years?
JH: Gosh, I wish I had something inspired to tell you. The ever-increasing mass of data will surely continue to affect both the tasks we need to solve and the evolving paradigms with which we solve them. It seems like our needs in quantity of computer programs and their capacity and robustness are accelerating and will continue to accelerate. It seems like our languages and tools will need to become dramatically more helpful assistants to us if we are to keep pace. I expect the programmer of the future to be coding with a more intelligent and supportive programming ecosystem. Many of the promising tools and nascent techniques for taming the ever-growing demand for more and better programs in a world of increasingly-ubiquitous computing seem tailored to functional sorts of languages.
PF.tv: If functional programming were a superhero, what superpower would it have?
JH: I don't know, but I hope its costume would look something like this.