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