`p: => Pipe` means it is a call by name variable, so every access of it will cause the expression that was passed to it to be evaluated. It is similar to a `() => Pipe` except that every time you use the variable, it is like calling the function.

This feature is what enables code like: `Some(1).getOrElse(sys.error("blow up"))` to never throw.