traversemengubah hal-hal di dalam a Traversablemenjadi Traversablesesuatu "di dalam" an Applicative, diberi fungsi yang membuat Applicatives dari benda-benda.
Mari gunakan Maybesebagai Applicativedan daftar sebagai Traversable. Pertama kita membutuhkan fungsi transformasi:
half x = if even x then Just (x `div` 2) else Nothing
Jadi jika angkanya genap, kita mendapatkan setengahnya (di dalam a Just), kalau tidak kita dapatkan Nothing. Jika semuanya berjalan "baik", akan terlihat seperti ini:
traverse half [2,4..10]
--Just [1,2,3,4,5]
Tapi...
traverse half [1..10]
-- Nothing
Alasannya adalah bahwa <*>fungsi tersebut digunakan untuk membangun hasil, dan jika salah satu argumennya adalah Nothing, kami Nothingkembali.
Contoh lain:
rep x = replicate x x
Fungsi ini menghasilkan daftar panjang xdengan konten x, misalnya rep 3= [3,3,3]. Apa hasil dari traverse rep [1..3]?
Kami mendapatkan hasil parsial [1], [2,2]dan [3,3,3]menggunakan rep. Sekarang semantik daftar sebagai Applicativesyang "mengambil semua kombinasi", misalnya (+) <$> [10,20] <*> [3,4]adalah [13,14,23,24].
"Semua kombinasi" [1]dan [2,2]dua kali [1,2]. Semua kombinasi dua kali [1,2]dan [3,3,3]enam kali [1,2,3]. Jadi kita punya:
traverse rep [1..3]
--[[1,2,3],[1,2,3],[1,2,3],[1,2,3],[1,2,3],[1,2,3]]