The paper on Purely Functional Lazy Non-deterministic Programming describes an approach to model lazy functional logic programming in Haskell via explicit sharing of monadic effects. The corresponding project page explains how to install and use our code.
I had an insightful discussion on haskell-cafe on how to steal the implementation of monadic bind from a continuation monad transformer.
I did it twice, first re-inventing the two-continuation model for depth-first search, then discovering an implementation of breadth-first search that I didn’t know before.
On the go, I used higher-rank infix record selectors for the first time.
In this program I talk about monads for non-determinism, functional lists, continuations, and what you get for free when you combine them.
What does this chart mean?
How can you write a Haskell predicate that detects (without diverging) that both of these two infinite trees are unsorted?