Non-determinism, backtracking and Monads