۲۴ - ۱ترکیب تایپ‌ها

در این فصل و فصل بعدی راجع به موند ترانسفورمرها، از دو جنبه‌ی قواعد و مفاهیمِ پایه‌ای، و کاربردهاشون صحبت می‌کنیم. برای خیلی از برنامه‌نویس‌ها، فرقی بین موند ترانسفورمر و جادو وجود نداره، ما هم از این دو جنبه پیش میریم تا نشون بدیم که هم میشه از طریق تایپ‌هاشون درک‌شون کرد، و هم میشه در برنامه‌نویسی معمولی ازشون استفاده کرد.

فانکتورها و اپلیکتیوها هردو تحت عملِ ترکیب بسته هستن: یعنی از ترکیب ِ دو فانکتور (یا اپلیکتیو یه فانکتور (یا اپلیکتیو) ِ دیگه بدست میاد. چنین چیزی برای موندها صادق نیست؛ ترکیب ِ دو موند لزوماً یه موند ِ دیگه نمیده. به زودی می‌بینیم.

با این حال، گاهی اوقات ترکیب ِ موندها لازم میشه. موندهای مختلف، اثرهای مختلفی در اختیار میذارن. با ترکیب ِ موندها میشه محاسبات رو با چند اثر انجام داد. برای مثال با سرِهَم کردنِ یه موند ِ ‏‎Maybe‎‏ با یه ‏‎IO‎‏، میشه اجراییه‌های ‏‎IO‎‏ رو به همراه محاسباتی که امکان شکست دارن انجام داد (موند ِ ‏‎Maybe‎‏ شکست ِ محاسبات رو به عهده می‌گیره).

یه موند ترانسفورمر در واقع حالتی از یه تایپِ معمولی‌ه، که یه آرگومانِ تایپی (مضاف بر آرگومان خود اون تایپ معمولی) می‌گیره که یه نمونه ِ ‏‎Monad‎‏ داره. برای مثال، ‏‎MaybeT‎‏ حالتِ ترانسفورمر ِ تایپِ ‏‎Maybe‎‏ ِه. نمونه ِ ‏‎Monad‎‏ ِ حالتِ ترانسفورمر ِ یه تایپ، از روی هر دو ساختار بایند می‌کنه. به همین خاطر میشه موندها و اثرات‌شون رو با هم ترکیب کرد. احساس راحتی با موند ترانسفورمرها از مهارت‌های مهم برای حرفه‌ای شدن در هسکل‌ه، ما هم خیلی آروم و قدم به قدم پیش میریم. قرار نیست از اولِ کار خودتون دسته‌ی ترانسفورمر تعریف کنین، اما آشنایی باهاشون به استفاده از کتابخونه‌های بقیه خیلی کمک می‌کنه.

در این فصل:

  • نشون میدیم که چرا ترکیب ِ دو موند یه موند ِ دیگه نمیده؛

  • تایپ‌های ‏‎Identity‎‏ و ‏‎Compose‎‏ رو بررسی می‌کنیم؛

  • انقدر تایپ‌ها رو دستکاری می‌کنیم تا بتونیم موندها رو ترکیب کنیم؛

  • با چندتا موند ترانسفورمر ِ رایج آشنا میشیم؛