A FoldM is a "left fold" over a data structure with:
A structure delivering elements of type A (variable type, like a List) and which can be folded over
A structure delivering elements of type A (fixed type, like an InputStream) and which can be folded over