Монадические парсеры

День 1 /  / Зал 1  /  RU /

«Зачем нужны эти ваши монады?» — такой вопрос звучит в сообществе С++ разработчиков с завидной частотой. Традиционно приводятся примеры монадического использования таких типов, как std::optional, std::future и std::expected, но список наиболее используемых монад в мире функционального программирования значительно шире. Вот какие есть монады в Haskell: Maybe (std::optional), Either (std::expected), IO, State, Reader, STM, Par (std::future). Не слишком полезно пытаться понять, что такое абстрактная монада и как она работает. Лучше предварительно изучить, как пользоваться монадическими инструментами, какие задачи они решают, и из этого знания вынести базовую интуицию, справедливую для любых монад.

В докладе будут рассмотрены монадические парсеры: чем этот подход отличается от других видов парсинга (комбинаторные парсеры а-ля Boost::Spirit, парсер-генераторы, ad hoc-решения вроде парсящих конечных автоматов и т. д.), какие у него преимущества и недостатки и в чем здесь проявляются такие важные концепции функционального программирования, как функтор, аппликативный функтор и монада.


Наши контакты