۱۶ - ۱فانکتور
در فصل قبل منظورمون از یک جبر رو گفتیم و دیدیم چطور میشه اون رو به یه تایپکلاس تبدیل کرد. تو این فصل، و دو فصل بعدی هم دربارهی Applicative
و Monad
روند مشابهی رو پیش میگیریم. هر جبر از جبر ِ قبلیش قویتره، اما ایدهی کلی تغییری نمیکنه: یه الگوی مشترک رو انتزاعی میکنیم، تضمین میکنیم از چندتا قانون پیروی کنه، یه اسم باحال بهش میدیم، و بعد در حیرت به سر میبریم که تا الان چطور بدون اون زندگی میکردیم. میشه گفت اصل داستان Monad
ِه، اما با Functor
و Applicative
کارهای زیادی میشه انجام داد، بیشتر از اونی که اکثراً فکر میکنن. از طرف دیگه درکِ Functor
و Applicative
برای درک عمیق از Monad
خیلی مهمه.
این فصل فقط راجع به Functor
ِه، Functor
هم همهش راجع به یه الگوی کلی برای نگاشت از روی یه ساختاره. خیلی وقت پیش تو فصلِ لیستها fmap
رو که نشون دادیم، گفتیم عینِ map
کار میکنه، یه چیز دیگه هم که گفتیم این بود که fmap
رو میشه برای ساختارهای غیر از لیست هم استفاده کرد. حالا ببینیم منظورمون چی بوده.
ظاهراً اولین کسی که از لغت فانکتور استفاده کرده، منطقدانِ بزرگ رودولف کارنَپ، در دههی ۱۹۳۰ بوده. این لغت رو برای توصیف تابعلغتهای گرامری و عملیاتهای روی جملات یا عبارات اختراع کرد. فانکتورها ترکیبکنندهاند: یک جمله یا عبارت رو به عنوان ورودی میگیرن و بعد از اعمال چندتا عملیات منطقی، یه جمله یا عبارت رو خروجی میدن. برای مثال نقیض یه فانکتور ِه، چون وقتی نقیض به یه جملهی A اعمال میشه، نسخهی نقضش، یعنی ¬A رو تولید میکنه. مفهوم نقیض رو روی کلِ جمله لیفت میکنه (یا بلند میکنه) بدون اینکه ساختار داخلیش رو تغییری بده (درسته که در زبانهای طبیعی، عاملِ نقیض – مثل not در انگلیسی و حرف "ن" در فارسی – وسط جملهها ظاهر میشن و نه بیرونشون، اما ایشون منطقدان بودن و خودشون رو درگیرِ چیزای به این سطح پایینی مثل زبان کلامی نمیکردن. در منطق، اوپراتورِ نقیض معمولاً پیشوندی نوشته میشه).
این فصل شامل:
بازگشتِ تایپهای گونهبالا؛
وفورِ fmap
، نه فقط روی لیستها؛
عدم حاشیهرویِ بیشتر راجع به منطقدانهای قدیمی؛
لغات مرتبط با تایپکلاسها و کلاسهای سازنده.