As I understand, stream fusion consists in converting operations on lists to operations on streams (colists), optimize redundant codata to data and back conversions, fuse operations on streams, and finally convert the resulting stream to a list again.
Data to codata conversion is a total operation, but the opposite is not. Is stream fusion optimization impossible in total functional programming languages?