bytestring and text both have adhoc copies of a particular flavor of stream fusion in the style of vector.
(and via something like backpack, their internals could largely be supplanted )
I have discussed this particular point with @snoyberg. My understanding is that @snoyberg’s proposal is to drop (implicit) stream fusion from the vector-like types that would live in the standard libraries in favor of an orthogonal, explicit stream type. Frankly, I think that dropping fusion would be a Good Thing: the status quo delivers questionable benefits and does so unreliably. Furthermore, when fusion fails to fire it creates a great deal of work for the compiler (and can even make the program slower than had we not attempted to fuse).
@snoyberg’s proposal is essentially to fold a set of primitive, unfused types into the standard library I believe this would render primitive (at least its types) largely redundant. Indeed you likely would want something like PrimMonad, however.
In any event, I think the idea here would be to reimplement text, bytestring, and primitive on top of the new types provided by the standard library, ensuring a reasonably low-cost migration path.