۲۰ - ۱۰قوانین Traversable
تابعِ traverse باید قوانینِ زیر رو رعایت کنه:
۱.
طبیعیبودن
t . traverse f = traverse (t . f)این قانون میگه ترکیبِ توابع، نسبت به یه تابعِ پیمایش شده رفتارِ غیرقابلِ پیشبینیای نداره. تابعِ پیمایش شدهی f ساختاری درست میکنه که "بیرون" از عملیات ِ traverse ظاهر میشه، پس دلیلی نداره که نتونیم یه تابع رو از بالاسَرِ ساختار ببریم توی خودِ پیمایش.
۲.
همانی
traverse Identity = Identityاین قانون میگه پیمایش ِ دادهساز ِ تایپِ Identity روی یه مقدار، همون جوابی رو میده که اگه خودِ مقدار رو میذاشتیم توی Identity. چیز دیگهای که از این قانون برداشت میشه اینه که Identity در واقع یه ساختار ِ همانی در پیمایش ِ داده هست. یا کلاً به کلامِ دیگه، یه نمونه ِ Traversable نمیتونه هیچ ساختار یا اثری اضافه یا تزریق کنه.
۳.
ترکیب
traverse (Compose . fmap g . f) =
Compose . fmap (traverse g) . traverse fاین قانون نشون میده که چطور میشه پیمایشهای متسلسل رو، با بهرهگیری از نوعداده ِ Compose که ساختارها رو ترکیب میکنه، به یک پیمایش کاهش بدیم.
تابعِ sequenceA باید از قوانینِ زیر تبعیت کنه:
۱.
طبیعیبودن
t . sequenceA = sequenceA . fmap t۲.
همانی
sequenceA . fmap Identity = Identity۳.
ترکیب
sequenceA . fmap Compose =
Compose . fmap sequenceA . sequenceAبا توجه به قانونهای traverse که دیدین، اینها نباید جدید بوده باشن.