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