۱۵ - ۴مانوید در هسکل چطور تعریف شده
تایپکلاسها در واقع راهی برای تشخیص، سازماندهی، و استفاده از قابلیتها و الگوهای مشترک بین تایپهایی که از لحاظهایی با هم متفاوتاند ولی اشتراکهایی هم دارن ارائه میدن. پس با توجه به اینکه تایپهای عددی متنوعاند، و میشه از همهشون به عنوانِ آرگومان برای تابعِ جمع استفاده کرد، تابع جمع رو جزئی از تایپکلاسِ 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
رو در عمل ببینیم.