Итак, я знаю, что содержит класс типа Applicative
и почему это полезно. Но я не могу понять, как вы могли бы использовать это в нетривиальном примере.
Рассмотрим, например, следующий довольно простой анализатор Parsec:
integer :: Parser Integer
integer = do
many1 space
ds <- many1 digit
return $ read ds
Теперь, как, черт возьми, вы могли бы написать это, не используя экземпляр Monad
для Parser
? Многие люди утверждают, что это можно сделать, и это хорошая идея, но я не могу понять, как именно.