۶ - ۱۵تعاریف

۱.

وراثت تایپکلاس یا typeclass inheretence وقتی پیش میاد که یه تایپکلاس دارای سوپرکلاس باشه. به کلام دیگه، یعنی برای نوشتنِ یه نمونه از یه تایپکلاس، تایپی که براش می‌خواین نمونه بنویسین، ملزم به داشتنِ نمونه از یه تایپکلاسِ دیگه‌ست.

class (Num a) => Fractional a where
  (/) :: a -> a -> a
  recip :: a -> a
  fromRational :: Rational -> a

اینجا تایپکلاسِ ‏‎Fractional‎‏ از ‏‎Num‎‏ ارث میبره. به عبارت دیگه ‏‎Num‎‏ یه سوپرکلاس برای ‏‎Fractional‎‏ ِه. یعنی اگه برای یه تایپ ‏‎a‎‏ بخواین نمونه ِ تایپکلاس ‏‎Fractional‎‏ بنویسین، اون تایپ ‏‎a‎‏ باید یه نمونه از ‏‎Num‎‏ داشته باشه.

-- شاید به نظر برسه که کار می‌کنه
-- Nada اما خطا میده، چون
-- نداره Num تایپکلاسِ


newtype Nada =
  Nada Double deriving (Eq, Show)

instance Fractional Nada where
  (Nada x) / (Nada y) = Nada (x / y)
  recip (Nada n) = Nada (recip n)
  fromRational r = Nada (fromRational n)

اگه این رو بارگذاری کنین:

No instance for (Num Nada)
  arising from the superclasses
  of an instance declaration
In the instance declaration for
  ‘Fractional Nada’

باید یه نمونه از ‏‎Num‎‏ داشته باشه. نمیشه براش نمونه ِ ‏‎Num‎‏ نوشت؟ پس حق ندارین نمونه ِ ‏‎Fractional‎‏ هم داشته باشین. اینجوریاس!

۲.

اثرات یا effects کارهای قابل مشاهده‌ای هستن که یه برنامه علاوه بر محاسبه‌ی مقادیر، ممکنه انجام بده. اگه تابعی یه حالت رو تغییر بده، یا با دنیای بیرون طوری تعامل کنه که بشه مشاهده کرد، میگیم اون تابع روی دنیای بیرونی اثر میذاره.

۳.

تایپِ ‏‎IO‎‏ برای مقادیری به کار میره که محاسبه‌شون احتمال داره منجر به عوارض جانبی بشه، مثل چاپ نوشته، خوندن نوشته ِ ورودی توسط کاربر، خوندن یا نوشتن فایل‌ها، یا اتصال به کامپیوترهای دیگه. تو فصلِ مربوط به ‏‎IO‎‏ خیلی عمیق‌تر بررسی می‌کنیم.

۴.

یک نمونه یا instance طرز کار یه تایپکلاس رو برای یه تایپ تعریف می‌کنه. نمونه‌ها به ازای یک تایپکلاس و یک تایپ، یکتا هستن.

۵.

در هسکل، نمونه‌های مشتق‌گرفته یا derived instances نمونه‌های تایپکلاس‌هایی هستن که تعریف‌شون واضح یا رایج‌ه. مثلاً نمونه ِ تایپکلاس‌های ‏‎Eq‎‏، ‏‎Enum‎‏، ‏‎Ord‎‏، و ‏‎Show‎‏ رو میشه برای نوع‌داده‌های زیادی، فقط بر اساس تعریف‌شون ایجاد کرد. این به برنامه‌نویس‌ها کمک می‌کنه یه کُد رو دائماً تکرار نکنند.