۲۰ - ۱۰قوانین 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
که دیدین، اینها نباید جدید بوده باشن.