There should be a combinator to take an arbitrary list of passes, and interleave them into a single pass where the fact type is a type-level list of other fact types:
interleavePasses :: [forall f. FwdPass m n f] -> FwdPass m n '[]
This seems quite Effective (pun most certainly intended).