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

by Philip Wadler
Venue:In Functional Programming Languages and Computer Architecture, volume 201 of LNCS