۱۵ - ۳مانوید

مانوید یک عملیات ِ دوتایی و شرکت‌پذیر با یه مقدارِ همانی ِه. این یک جمله تعریف چیزهای زیادی میگه – البته اگه به جزبه‌جز کردنِ تعاریف ریاضی عادت دارین. بریم سراغ تشریح قورباغه!

مانوید یک عملیات دوتایی و شرکت‌پذیر
  [4]        [3]     [2]        [1]
.با یک مقدار همانی‌ه
   [5]

۱.

چیزی که داریم راجع بهش حرف میزنیم – مانویدها. بعداً می‌بینیم اسمِ تایپکلاس‌مون هم هست.

۲.

عملیات – به این خاطر اسم‌ش اینه چون اکثراً در ریاضیات به عنوان یه عملگر ِ میانوند استفاده میشه. اگه بهش تابع هم بگین موردی نداره. دقت کنین به خاطر دوتایی بودن (که در ۳ میگیم)، یه تابعِ دوآرگومانی‌ه.

۳.

دوتایی یا باینری. یعنی فقط دوتا از یه چیزی هست.

۴.

شرکت‌پذیر – این یه مشخصه یا قانونی ِه که باید رعایت بشه. شرکت‌پذیری رو در جمع و ضرب دیدین. یه کم جلوتر بیشتر توضیح میدیم.

۵.

همانی یکی از اون کلمه‌هایی‌ه که خیلی جاها از ریاضی دیده میشه. اینجا میشه گفت یه مقداری‌ه که وقتی با یه مقدارِ دیگه ترکیب میشه، نتیجه همیشه اون مقدارِ دوم میشه. با مثال خیلی روشن میشه.

برای لیست‌ها، عملگر ِ دوتایی ِ ‏‎(++)‎‏ دوتا لیست رو به هم می‌چسبونه. برای همین کار از تابعِ ‌‏‎mappend‎‏ از تایپکلاسِ ‏‎Monoid‎‏ هم میشه استفاده کرد:

Prelude> mappend [1, 2, 3] [4, 5, 6]
[1,2,3,4,5,6]

برای لیست‌ها، لیستِ خالی ‏‎[]‎‏ مقدار همانی میشه:

mappend [1..5] [] = [1..5]
mappend [] [1..5] = [1..5]

همین رو میشه به عنوانِ یه قاعده‌ی کلی‌تر، با استفاده از ‏‎mempty‎‏ از تایپکلاسِ ‏‎‎‏Monoid به عنوانِ یه مقدارِ همانی ِ جامع، بازنویسی کنیم (بعداً بیشتر توضیح میدیم):

mappend x mempty = x
mappend mempty x = x

به زبونِ ساده، مانوید یه تابع‌ه که دو آرگومان می‌گیره و از دو قانون تبعیت می‌کنه: شرکت‌پذیری و همانی. شرکت‌پذیری یعنی آرگومان‌ها می‌تونن به ترتیبِ متفاوتی گروه‌بندی بشن (یا پرانتزگذاری بشن، یا شرکت داده بشن) و همون جواب رو بِدن، مثل جمع. همانی یعنی یک مقدار وجود داره که هر وقت به عنوان ورودی به تابع‌مون میدیم، در واقع اون عملیات بی‌معنا میشه و اون یکی مقدار میشه خروجیِ تابع، مثل وقتی که با صفر جمع یا با ۱ ضرب می‌کنیم. ‏‎Monoid‎‏ تایپکلاسی‌ه که این قواعد رو بین تایپ‌ها تعمیم میده.