۲۴ - ۱ترکیب تایپها
در این فصل و فصل بعدی راجع به موند ترانسفورمرها، از دو جنبهی قواعد و مفاهیمِ پایهای، و کاربردهاشون صحبت میکنیم. برای خیلی از برنامهنویسها، فرقی بین موند ترانسفورمر و جادو وجود نداره، ما هم از این دو جنبه پیش میریم تا نشون بدیم که هم میشه از طریق تایپهاشون درکشون کرد، و هم میشه در برنامهنویسی معمولی ازشون استفاده کرد.
فانکتورها و اپلیکتیوها هردو تحت عملِ ترکیب بسته هستن: یعنی از ترکیب ِ دو فانکتور (یا اپلیکتیو)، یه فانکتور (یا اپلیکتیو) ِ دیگه بدست میاد. چنین چیزی برای موندها صادق نیست؛ ترکیب ِ دو موند لزوماً یه موند ِ دیگه نمیده. به زودی میبینیم.
با این حال، گاهی اوقات ترکیب ِ موندها لازم میشه. موندهای مختلف، اثرهای مختلفی در اختیار میذارن. با ترکیب ِ موندها میشه محاسبات رو با چند اثر انجام داد. برای مثال با سرِهَم کردنِ یه موند ِ Maybe
با یه IO
، میشه اجراییههای IO
رو به همراه محاسباتی که امکان شکست دارن انجام داد (موند ِ Maybe
شکست ِ محاسبات رو به عهده میگیره).
یه موند ترانسفورمر در واقع حالتی از یه تایپِ معمولیه، که یه آرگومانِ تایپی (مضاف بر آرگومان خود اون تایپ معمولی) میگیره که یه نمونه ِ Monad
داره. برای مثال، MaybeT
حالتِ ترانسفورمر ِ تایپِ Maybe
ِه. نمونه ِ Monad
ِ حالتِ ترانسفورمر ِ یه تایپ، از روی هر دو ساختار بایند میکنه. به همین خاطر میشه موندها و اثراتشون رو با هم ترکیب کرد. احساس راحتی با موند ترانسفورمرها از مهارتهای مهم برای حرفهای شدن در هسکله، ما هم خیلی آروم و قدم به قدم پیش میریم. قرار نیست از اولِ کار خودتون دستهی ترانسفورمر تعریف کنین، اما آشنایی باهاشون به استفاده از کتابخونههای بقیه خیلی کمک میکنه.
در این فصل:
نشون میدیم که چرا ترکیب ِ دو موند یه موند ِ دیگه نمیده؛
تایپهای Identity
و Compose
رو بررسی میکنیم؛
انقدر تایپها رو دستکاری میکنیم تا بتونیم موندها رو ترکیب کنیم؛
با چندتا موند ترانسفورمر ِ رایج آشنا میشیم؛