use fold instead of consumer