۲۰ - ۲تعریف تایپکلاس Traversable

این تعریفِ تایپکلاس در کتابخونه ‏‎Data.Traversable‎‏ ِه:

class (Functor t, Foldable t)
   => Traversable t where
    traverse :: Applicative f =>
                (a -> f b)
             -> t a
             -> f (t b)
    traverse f = sequenceA . fmap f

تابعِ ‏‎traverse‎‏ تک‌تکِ المان‌های یه ساختار رو به یه اجراییه نگاشت میده، اجراییه‌ها رو از چپ به راست محاسبه می‌کنه، و نتایج رو جمع‌آوری می‌کنه.

-- | در ساختار رو action هر
-- | از چپ به راست محاسبه کن
-- | .و نتایج رو جمع‌آوری کن
sequenceA :: Applicative f
          => t (f a) -> f (t a)
sequenceA = traverse id
{-# MINIMAL traverse | sequenceA #-}

یه نمونه از این تایپکلاس، حداقل یکی از دو تابعِ ‏‎traverse‎‏ یا ‏‎sequenceA‎‏ رو ارائه میده، چون همونطور که می‌بینید، هرکدوم از اونها رو میشه برمبنای اون یکی تعریف کرد. مشابهِ ‏‎Foldable‎‏، اینجا هم اگه روشِ بهینه‌تری برای محاسبه با نوع‌داده‌مون داشته باشیم، میشه متودهای دیگه‌ی تایپکلاس هم تعریف کنیم. ما تو این فصل فقط روی همین دو تابع تمرکز می‌کنیم، چون این دوتا از بقیه خیلی بیشتر کاربرد دارن.