lomeo: (лямбда)
Dmitry Antonyuk ([personal profile] lomeo) wrote2010-03-06 11:50 am

Библиотеки

Две библиотеки, о которых узнал из френд-ленты. Понравились.

1. mmtl via [livejournal.com profile] permea_kra.

Очередная библиотека монад-трансформеров с фишкой. Позволяет не определять для каждой монады инстанс каждого монад-класса. Таким образом модуль с ReaderT не будет ничего знать о MonadWriter, тем не менее инстансы для

(а) MonadWriter w => MonadWriter w (ReaderT r (Writer w))
и
(б) MonadWriter w m => MonadWriter w (ReaderT r (WriterT w m))

будут выводиться. Т.е. теперь мы пишем свой монад-трансформер и у нас автоматом есть инстансы для всех имеющихся монад классов.

К сожалению, (а) и (б) реализованы как отдельные инстансы. Была бы ещё возможность описать это в отдельном - типа
MonadWriter w i, MonadTrans t => MonadWriter w (t i)


Написано, что "Inspired by the paper /Functional Programming with Overloading and Higher-Order Polymorphism/, Mark P Jones"

2. Coroutine via [livejournal.com profile] nponeccop.

lightweight session types для описания протоколов. Индексированная монада для представления линейных типов, собирание типов с помощью комбинаторов типов. Понравилась реализация дуальности типа клиента и сервера - очень просто и красиво.

Подробнее в презентации Haskell Session Types with (Almost) No Class
от Jesse Tov. Есть видео, но я его не смотрел.

по первому

[identity profile] nealar.livejournal.com 2010-03-09 04:05 pm (UTC)(link)
Если накрутить StateT на StateT - интересно, что выведется?

Re: по первому

[identity profile] lomeo.livejournal.com 2010-03-10 09:51 am (UTC)(link)
Действительно. Надо попробовать.