(fold => fold)(fmap => algebra => function doFold(v) {return algebra(fmap(doFold)(v))})