various combinators for functions
A pipe operator, equivalent to |!, but this notation is more broadly accepted
* ignore is the same as Pervasives.ignore. It is useful to have here so
* that code that rebinds ignore can still refer to Fn.ignore.
forever f runs f () until it throws an exception and returns the
exception. This function is useful for read_line loops, etc.