З мого досвіду, аплікативні функтори чудові з наступних причин:
Певні типи структур даних допускають потужні типи композицій, але насправді не можуть бути монадами. Насправді більшість абстракцій у функціональному реактивному програмуванні належать до цієї категорії. Хоча ми технічно можемо зробити, наприклад, Behavior(ака Signal) монаду, як правило, це не може бути зроблено ефективно. Аплікативні функтори дозволяють нам все ще мати потужні композиції, не жертвуючи ефективністю (правда, дещо складніше використовувати аплікатив, ніж монаду, просто тому, що у вас не так багато структури, з якою можна працювати).
Відсутність залежності від даних у аплікативному функторі дозволяє, наприклад, здійснити обхід дії, шукаючи всі ефекти, які вона може дати, не маючи даних. Отже, ви можете собі уявити застосунок "веб-форма", який використовується так:
userData = User <$> field "Name" <*> field "Address"
і ви можете написати механізм, який обходиться, щоб знайти всі використані поля та відобразити їх у формі, а потім, коли ви повернете дані, запустіть їх знову, щоб отримати побудовані User. Цього не можна зробити за допомогою звичайного функтора (оскільки він поєднує дві форми в одну), ні монади, оскільки за допомогою монади ви можете виразити:
userData = do
name <- field "Name"
address <- field $ name ++ "'s address"
return (User name address)
який неможливо відтворити, оскільки ім'я другого поля не може бути відоме, не маючи відповіді з першого. Я майже впевнений, що існує бібліотека, яка реалізує ідею цієї форми - я кілька разів прокатував свою для цього і того проекту.
Інша приємна річ аплікативних функторів - це те, що вони складають . Точніше, функтор композиції:
newtype Compose f g x = Compose (f (g x))
застосовується будь-коли fі gє. Те саме не можна сказати про монади, що створює цілу історію монадних трансформаторів, яка ускладнюється якимось неприємним чином. Таким чином, додатки надзвичайно чисті, і це означає, що ви можете створити структуру потрібного вам типу, зосередившись на невеликих компонуючих компонентах.
Нещодавно ApplicativeDoрозширення з'явилося в GHC, що дозволяє використовувати doпозначення з додатками, полегшуючи деякі нотаційні складності, якщо ви не робите жодних монадійних дій.