it's using `p` for "pristine" (unused) variables, and `t` for everything that went through the unifier because of usage in some function call? Prelude> f a b c d e = b d Prelude> :t f f :: p1 -> (t1 -> t2) -> p2 -> t1 -> p3 -> t2 - J.W.