Improve `restrict`, and allow caller to control what type is returned for failure.
Improve `restrict`, and allow caller to control what type is returned for failure.

mafagafogigante/racket,mafagafogigante/racket,mafagafogigante/racket,mafagafogigante/racket,mafagafogigante/racket,mafagafogigante/racket,mafagafogigante/racket,mafagafogigante/racket,mafagafogigante/racket