A backtracking logic programming monad (http://code.haskell.org/~dolio/)