map
ada untuk menyederhanakan operasi pada daftar dan untuk alasan historis (lihat Apa gunanya peta di Haskell, bila ada fmap? ).
Anda mungkin bertanya mengapa kami membutuhkan fungsi peta terpisah. Mengapa tidak menyingkirkan saja fungsi peta hanya-daftar saat ini, dan mengganti nama fmap menjadi peta? Nah, itu pertanyaan yang bagus. Argumen yang biasa adalah bahwa seseorang yang baru saja mempelajari Haskell, ketika menggunakan peta secara tidak benar, lebih suka melihat kesalahan tentang daftar daripada tentang Functor.
- Typeclassopedia , halaman 20
fmap
dan liftM
ada karena monad tidak secara otomatis berfungsi di Haskell:
Fakta bahwa kita memiliki fmap dan liftM adalah konsekuensi yang tidak menguntungkan dari fakta bahwa kelas tipe Monad tidak memerlukan turunan Functor, meskipun secara matematis, setiap monad adalah functor. Namun, fmap dan liftM pada dasarnya dapat dipertukarkan, karena ini adalah bug (dalam arti sosial daripada teknis) untuk semua jenis yang menjadi instance Monad tanpa juga menjadi instance Functor.
- Typeclassopedia , halaman 33
Sunting: sejarah agustuss map
dan fmap
:
Sebenarnya bukan itu yang terjadi. Yang terjadi adalah tipe peta digeneralisasikan untuk mencakup Functor di Haskell 1.3. Yaitu, di Haskell 1.3 fmap disebut map. Perubahan ini kemudian dikembalikan di Haskell 1.4 dan fmap diperkenalkan. Alasan perubahan ini adalah karena pedagogis; saat mengajari Haskell kepada pemula, tipe peta yang sangat umum membuat pesan kesalahan lebih sulit untuk dipahami. Menurut saya, ini bukan cara yang tepat untuk menyelesaikan masalah.
- Apa gunanya map di Haskell, kalau ada fmap?