override foldLeftM, foldRightM