type ('req, 'rep, 'req', 'rep') t
= ('req, 'rep) Service.t -> ('req', 'rep') Service.t
type ('req, 'rep) simple
= ('req, 'rep, 'req, 'rep) t
A filter is simple when it preserves the type of a service
val (>>>) : ('q1, 'p1, 'q2, 'p2) t -> ('q2, 'p2, 'q3, 'p3) t -> ('q1, 'p1, 'q3, 'p3) t
val apply_all : ('req, 'rep) simple list -> ('req, 'rep) Service.t -> ('req, 'rep) Service.t