۱۵ - ۴مانوید در هسکل چطور تعریف شده

تایپکلاس‌ها در واقع راهی برای تشخیص، سازماندهی، و استفاده از قابلیت‌ها و الگوهای مشترک بین تایپ‌هایی که از لحاظ‌هایی با هم متفاوت‌اند ولی اشتراک‌هایی هم دارن ارائه میدن. پس با توجه به اینکه تایپ‌های عددی متنوع‌اند، و میشه از همه‌شون به عنوانِ آرگومان برای تابعِ جمع استفاده کرد، تابع جمع رو جزئی از تایپکلاسِ ‏‎Num‎‏ (که همه‌ی اعداد دارن) می‌کنیم.

تایپکلاسِ ‏‎Monoid‎‏ یه الگو ِ متفاوتی نسبت به ‏‎Num‎‏ رو تحت پوشش میده، اما هدف همون ِه. کلیاتِ ‏‎Monoid‎‏ رو بالاتر گفتیم: تایپ‌هایی که تابع‌های دوتایی‌ای دارن که با پیروی از قاعده‌ی شرکت‌پذیری ورودی‌هاشون رو با هم متحد می‌کنن، و همچنین یه مقدارِ همانی هم دارن که وقتی یکی از آرگومان‌های تابع میشن، تابعْ آرگومانِ دیگه رو بدونِ تغییر برگردونه. این الگو برای جمع، ضرب، الحاق ِ لیست‌ها و غیره هم صادق‌ه. این تایپکلاس چنین الگویی رو انتزاع و تعمیم می‌کنه تا بشه برای هر تایپی که قابلیتِ ترکیب ِ مانویدی داره ازش استفاده کنیم.

تایپکلاسِ ‏‎Monoid‎‏ اینطوری تعریف شده:

class Monoid m where
  mempty  :: m
  mappend :: m -> m -> m
  mconcat :: [m] -> m
  mconcat = foldr mappend mempty

با ‏‎mappend‎‏ میشه هر دو مقداری که عضوِ تایپ‌تون هستن رو با هم متحد کنین. ‏‎mempty‎‏ مقدارِ همانی برای عملیات ِ ‏‎mappend‎‏ ِه. یه سری قانونهایی هستن که همه‌ی نمونه‌های ‏‎Monoid‎‏ باید رعایت کنن که به زودی می‌بینیم. اول چندتا مثال از ‏‎Monoid‎‏ رو در عمل ببینیم.