So I figured I avoid all the hassle by using Stream<A> everywhere and casting into B where necessary.
This makes my clean code heart cry a little.