ابتدای محتوای صفحه
۲۰ - ۵کاربرد Traversable چیه؟
کلامی بخوایم بگیم، وقتایی که میخواین دوتا ساختار رو با هم جابجا کنین، یا بخواین اول یه چیزی رو نگاشت کنین بعد ساختارها رو جابجا کنین، احتمالاً Traversable
لازم دارین:
sequenceA :: (Applicative f, Traversable t)
=> t (f a) -> f (t a)
traverse :: Applicative f
=> (a -> f b) -> t a -> f (t b)
با چندتا تابع و مقادیرِ فرضی (بدون اینکه تعریفشون کنیم) تو REPL بازی میکنیم تا ببینیم کِی ممکنه traverse
یا sequenceA
بخوایم:
Prelude> let f = undefined :: a -> Maybe b
Prelude> let xs = undefined :: [a]
Prelude> :t map f xs
map f xs :: [Maybe b]
اگه یه مقدار با تایپ Maybe [b]
بخوایم چطور؟ کُدِ زیر کار میکنه، ولی بهتر هم میشه نوشت:
Prelude> :t sequenceA $ map f xs
sequenceA $ map f xs :: Maybe [a]
هر وقت یه sequence
یا sequenceA
رو با map
یا fmap
دیدین، معمولاً بهتره با traverse
جایگزین بشن:
Prelude> :t traverse f xs
traverse f xs :: Maybe [b]
الان کاربردِ اینها در مثالهای واقعی رو میبینیم.