Библиотеки
Mar. 6th, 2010 11:50 am![[personal profile]](https://www.dreamwidth.org/img/silk/identity/user.png)
Две библиотеки, о которых узнал из френд-ленты. Понравились.
1. mmtl via
permea_kra.
Очередная библиотека монад-трансформеров с фишкой. Позволяет не определять для каждой монады инстанс каждого монад-класса. Таким образом модуль с
(а)
и
(б)
будут выводиться. Т.е. теперь мы пишем свой монад-трансформер и у нас автоматом есть инстансы для всех имеющихся монад классов.
К сожалению, (а) и (б) реализованы как отдельные инстансы. Была бы ещё возможность описать это в отдельном - типа
Написано, что "Inspired by the paper /Functional Programming with Overloading and Higher-Order Polymorphism/, Mark P Jones"
2. Coroutine via
nponeccop.
lightweight session types для описания протоколов. Индексированная монада для представления линейных типов, собирание типов с помощью комбинаторов типов. Понравилась реализация дуальности типа клиента и сервера - очень просто и красиво.
Подробнее в презентации Haskell Session Types with (Almost) No Class
от Jesse Tov. Есть видео, но я его не смотрел.
1. mmtl via
![[livejournal.com profile]](https://www.dreamwidth.org/img/external/lj-userinfo.gif)
Очередная библиотека монад-трансформеров с фишкой. Позволяет не определять для каждой монады инстанс каждого монад-класса. Таким образом модуль с
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]](https://www.dreamwidth.org/img/external/lj-userinfo.gif)
lightweight session types для описания протоколов. Индексированная монада для представления линейных типов, собирание типов с помощью комбинаторов типов. Понравилась реализация дуальности типа клиента и сервера - очень просто и красиво.
Подробнее в презентации Haskell Session Types with (Almost) No Class
от Jesse Tov. Есть видео, но я его не смотрел.