۶ - ۲تایپکلاس چیه؟

شاید بشه گفت که تایپ‌ها و تایپکلاس‌ها در هسکل متضاد همدیگه‌اند. تعریفِ یه تایپ، ساخته شدن اون تایپِ بخصوص رو توصیف می‌کنه، ولی یه تایپکلاس، طریقه‌ی مصرف شدن ِ مجموعه‌ای از تایپ‌ها یا نحوه‌ی استفاده از اونها در محاسبات رو بیان می‌کنه. این اختلاف مرتبط با همون مشکل در بیان ِه که فیلیپ ودلر اینطور معرفی می‌کنه: "هدف اینه که بتونیم یه نوع‌داده رو با موارد تعریف کنیم، که بدونِ کامپایل ِ مجددِ کدِ موجود، و همینطور حفظ امنیت نوعیِ ایستا (مثل عدم تغییر تایپِ مقادیر)، هم موارد جدید به نوع‌داده ِمون اضافه کنیم و هم توابع جدید برای تایپ‌مون تعریف کنیم."* اگه با بعضی زبان‌های برنامه‌نویسی دیگه آشنا هستین، می‌تونین تایپکلاس‌ها رو به عنوان رابط‌هایی بین داده‌ها فرض کنین که با چند نوع‌داده کار می‌کنن. دلیل کلیدی بودنِ تایپکلاس‌ها در پلی‌مورفیسمِ اد-هاک، همین ویژگی‌شون در تعریف نحوه‌ی استفاده از تایپ‌هاست – به این خاطر میگیم اد-هاک (م. یا "مورِدی")، چون کدِ تایپکلاس براساس تایپ‌ها خبر میشه (مسئله‌ای که بعداً تو این فصل بیشتر بِهِش می‌پردازیم). به نظرِ ما پلی‌مورفیسمِ محدود لغت واضح‌تری میاد، به همین خاطر از این لغت استفاده می‌کنیم.

به کمک تایپکلاس‌ها می‌تونیم تایپ‌ها رو دسته‌بندی، و مجموعه‌ای از قابلیت‌ها و امکانات رو برای اون دسته از تایپ‌ها تعریف و اجرا کنیم. برای مثال، قابلیتِ بررسی تساویِ مقادیر، تابعِ مُفیدی‌ِه و می‌خوایم از این تابع برای نوع‌داده‌های زیادی استفاده کنیم. در واقع هر داده از یه تایپی که تایپکلاسی به اسمِ ‏‎Eq‎‏ در خودش داره رو می‌تونیم برای تساوی مقایسه کنیم و لازم نیست برای تک‌تکِ تایپِ داده‌ها تابعِ تساوی تعریف کنیم؛ فقط کافیه تایپِ مورد نظر یه نمونه از تایپکلاسِ ‏‎Eq‎‏ داشته باشه تا با استفاده از توابعِ استانداردِ تساوی، داده‌هاش رو بررسی کنیم. تایپکلاسِ ‏‎Num‎‏ هم برای همه‌ی لفظ‌های عددی و انواعِ تایپ‌هاشون تعریف شده، و در نتیجه همه‌ی اعداد از یه مجموعه از متودها که در تایپکلاسِ ‏‎Num‎‏ تعریف شدن بهره می‌برن.

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