Coproduct is a sum type for different Functors with the same data type T.
e.g.
Coproduct<stream,optional,Integer> nums = Coproduct.stream(1,2,3,OptionalKind.Instances.definitions());
int result = nums.map(i->i*2)
.foldUnsafe()
.foldLeft(Monoids.intSum);
//12