۴ - ۱۰تعاریف

۱.

چندتایی، توپِل یا tuple یک گروهِ ترتیب‌دار از مقادیره. در هسکل، توپل رو با یک المان نمیشه درست کرد، ولی توپل با صفر المان، به اسم واحد و با نماد ()، تعریف شده. تایپِ المان‌های توپل‌ها ممکنه متفاوت باشن، پس برای مثال، هم (String, String) صحیح‌ه، و هم (Integer, String). معمولاً از توپل‌ها برای نگهداریِ موقت و بدون اسمِ چند مقدار استفاده میشه.

۲.

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

۳.

داده‌ساز یا data constructor ها در هسکل روشی برای ساخت مقادیری از یک تایپ هستن. داده‌سازهای هسکل یه تایپ دارن، و ممکنه مقدارِ ثابتی باشن (پوچ‌گانه) یا مثلِ توابع، یک آرگومان یا بیشتر بگیرن. در مثال زیر، Cat یه داده‌ساز ِپوچ‌گانه برای Pet، و Dogداده‌سازیه که یک آرگومان می‌گیره:

-- ،گربه که جواب نمیده
-- اسم می‌خواد چی کار؟
type Name = String

data Pet = Cat | Dog Name

این داده‌سازها تایپ‌های زیر رو دارن:

Prelude> :t Cat
Cat :: Pet
Prelude> :t Dog
Dog :: Name -> Pet

۴.

نوع‌ساز یا type constructor ها در هسکل مقدار نیستن، و فقط در تایپ سیگنچرها کاربرد دارن. یک تعریفِ داده، همونطور که داده‌سازهایی رو برای ساختِ مقادیرِ یک تایپ تعریف می‌کنه، نوع‌سازهایی هم برای اشاره به اون تایپ ایجاد می‌کنه. در مثالِ بالا، Petنوع‌ساز ِایجاد شده در اون تعریف‌ه. راه ساده برای تشخیص بین داده‌سازها و نوع‌سازها اینه که در یک تعریفِ داده،نوع‌سازها همیشه سمت چپِ تساوی نوشته میشن.

۵.

تعریفِ داده یا data declaration ها، تایپ‌های جدید تعریف می‌کنن. تعاریفِ داده همیشه یک نوع‌سازِ جدید میسازن، ولی الزاماً داده‌ساز جدید ایجاد نمی‌کنن. تعریف داده، در واقع اسم کلِ جمله‌ایه که با کلیدواژه‌ی data شروع میشه.

۶.

تایپِ مستعار یا type alias راهی برای اشاره به یک نوع‌ساز یا تایپِ ثابت با یه اسم دیگه‌ست. معمولاً برای خوانایی بیشترِ کد، یا خلاصه‌نویسی از این تایپ‌های مستعار استفاده می‌کنیم.

type Name = String
-- برای Name یک نام مستعار به اسم
-- *؛ تعریف داده *نیستString تایپ
-- فقط تعریف برای یه تایپ مستعاره

۷.

آریتی یا arity تعداد آرگومان‌هاییه که یه تابع قبول می‌کنه. البته این واژه در هسکل، کمی بی‌معنی‌ه، چرا که به خاطر currying همه‌ی توابع تک-آریتی اند. توابعِ چند آرگومانی با چند تابعِ تودرتو معادل میشن.

۸.

چندریختی، پلی‌مورفیسم یا polymorphism در هسکل یعنی بتونیم بر مبنای مقادیری که ممکنه تایپ‌شون یکی از چندتا، یا همه‌ی تایپ‌ها باشن، کُد بنویسیم. پلی‌مورفیسم در هسکل یا پارامتری ِه یا محدود. تابع همانی، id، مثالی از پلی‌مورفیسمِ پارامتری ِه:

id :: a -> a
id x = x

اینجا id از هیچ اطلاعاتی مختصِ یه تایپ، یا مجموعه‌ای از تایپ‌ها استفاده نمی‌کنه، و با همه‌ی تایپ‌ها کار می‌کنه. ولی تابع زیر:

isEqual :: Eq a => a -> a -> Bool
isEqual x y = x == y

یه تابع پلی‌مورفیکِ محدود یا مقیّد به مجموعه‌ای از تایپ‌هاییه که حتماً یه نمونه از تایپکلاس Eq رو داشته باشن. در یکی از فصل‌های آینده، انواع پلی‌مورفیسم رو با جزئیات توضیح میدیم.