map
існує спрощення операцій зі списками та з історичних причин (див. Який сенс карти в Haskell, коли є fmap? ).
Ви можете запитати, навіщо нам потрібна окрема функція карти. Чому б просто не усунути поточну функцію лише для списку карт, а перейменувати fmap на карту? Ну, це гарне запитання. Звичайний аргумент полягає в тому, що хтось просто вивчає Haskell, коли неправильно використовувати карту, швидше побачить помилку щодо списків, ніж про Functors.
- Типкласопедія , сторінка 20
fmap
і liftM
існують, тому що монади не були автоматично функціонерами в Haskell:
Той факт, що у нас є і fmap, і liftM - прикрий наслідок того, що для класу типу Monad не потрібен екземпляр Functor, хоча математично кажучи, кожна монада є функтором. Однак, fmap і liftM по суті є взаємозамінними, оскільки помилка (в соціальному, а не технічному розумінні) для будь-якого типу є екземпляром Monad, не будучи також екземпляром Functor.
- Типкласопедія , стор. 33
Редагувати: історія agustuss map
та fmap
:
Це насправді не так, як це відбувається. Сталося те, що тип карти було узагальнено для покриття Functor в Haskell 1.3. Тобто, в Haskell 1.3 fmap називали картою. Потім цю зміну було повернено в Haskell 1.4 і було введено fmap. Причиною цієї зміни була педагогічна; при навчанні Haskell для початківців дуже загальний тип карти робив повідомлення про помилки важче зрозуміти. На мою думку, це був не правильний спосіб вирішення проблеми.
- Який сенс карти в Haskell, коли є fmap?