هر ساختمان داده ای که خاصیت شرکت پذیری داشته باشه بهش می گن Monoid و تابع fold از این توانایی استفاده کنه.
شرکت پذیری در ریاضی یعنی اگر ترتیب اعداد جابجا کنیم تاثیری در جواب نداره مثل اعمال ضرب یا جمع.
حالا فرض کنید لیستی داریم از اعداد 1 تا 5 می خوایم دو به دو اونها رو جمع بزنیم.مثال:
list(1,2,3,4,5).fold(_+_)
من به تابع fold عملگر جمع رو دادم و گفتم دو به دو جمع بزن.یعنی:
1 با 2 جمع کن.حاصل را با 3 جمع کن.حاصل را با 4 جمع کن.حاصل را با 5 جمع کن.
در زبان اسکالا monoid به صورت trait تعریف میشه.