How to replace failure by a list of successes: A method for exception handling, backtracking, and pattern matching in lazy functional languages (1985)

by P Wadler
Venue:Functional Programming Languages and Computer Architecture, Lecture Notes in Computer Science