۱۱ - ۲دورهای از تعاریف داده
برای اینکه بتونیم دادهها ِ مورد پردازش رو اونطور که میخوایم توصیف کنیم، بیشتر پیش میاد که نوعدادههای اختصاصی ِ خودمون رو بسازیم. چنین کاری باعث میشه مسئله رو بیشتر بررسی کنیم، و قبل از نوشتنِ محاسبات و اقدام به حل مسئله، اول روی نحوهی مدل کردن ِ دامنه تمرکز کنیم. همین که مدلِ دامنه به وضوح مشخص بشه، خوندنِ کُد و استفاده از اون هم نهایتاً راحتتر میشه.
البته چیزهایی که تا اینجا یاد گرفتیم هنوز برای نوشتن تایپهای خودمون کافی نیستن، باید نحوهی ساخته شدن ِ نوعدادهها رو با جزئیات بیشتری درک کنیم. با یه دوره از بخشهای مهمِ نوعدادهها شروع میکنیم. تعریفِ Bool
و لیستها رو به خاطر دارین؟
data Bool = False | True
-- [1] [2] [3] [4] [5] [6]
data [] a = [ ] | a : [a]
-- [ 7 ] [8] [9]
۱.
کلیدواژه ِ data
که نشون میده نوشتههای بعدش یه تعریف داده، یا تعریفی از یه نوعداده هستن.
۲.
نوعساز (بدون هیچ آرگومانی).
۳.
علامتِ تساوی نوعساز رو از دادهسازهاش جدا میکنه.
۴.
دادهساز که اینجا هیچ آرگومانی نمیگیره؛ و بهش پوچگانه میگیم. این یکی از مقادیری از تایپه که در سطح جملهای ِ کد ظاهر میشه.
۵.
خط عمودی مشخصهی تایپِ جمع، یا فصل منطقی (معادلِ یا) هست.
۶.
دادهساز برای مقدارِ True
، یه سازنده ِ پوچگانه ِ دیگه.
۷.
نوعساز با یک آرگومان. یه لیست خالی باید به یه آرگومان اعمال بشه تا لیستِ یه چیزی بشه. اینجا آرگومانش یه متغیر تایپ ِ پلیمورفیک ِه، پس آرگومان لیست میتونه هر تایپی باشه.
۸.
دادهساز برای لیست خالی.
۹.
دادهسازی که دو تا آرگومان میگیره: یک a
، و یک [a]
.
هر وقت میگیم تعریف داده، منظورمون تعریفِ کلِ نوعداده هست. اگه تایپ رو شمارشی از سازندهها که صفرتا یا بیشتر آرگومان دارن بدونیم، Bool
شمارشی از دو سازنده هست که هر کدوم صفر آرگومان میگیرن. از طرفِ دیگه نوعساز ِ []
دو سازنده رو میشماره که یکیشون دو آرگومان میگیره. خط عمودی، تایپ جمع رو نشون میده، تایپی که بیشتر از یک سازنده داخلش هست.
علاوه بر تایپهای جمع، هسکل تایپ ضرب هم داره که کمی جلوتر توضیح میدیم. دادهسازها در تایپهای ضرب بیشتر از یک پارامتر دارن. حالا اول به معنای لغتِ سازنده دقت کنیم.