Pure intersection types in 8.1 mean class and interface types only, which excludes the nullable case that most signatures need.
// 8.1
function f(Countable&Traversable $rows) {} // fine
function g(?(Countable&Traversable) $rows) {} // parse error
function h(Countable&null $rows) {} // parse error
// so the 8.1 workaround, which is a real cost:
function f(Countable&Traversable $rows) {}
function fOrNothing(?iterable $rows) {} // a second method
The restriction to class types is what “pure” means and it rules out exactly the combination people reach for first. Within the limit it still removes real ceremony: a marker interface that existed only to name a combination, and the retrofit onto a third-party class that was never possible at all. DNF types in 8.2 lift the restriction three weeks before the end of the year.