← All posts tagged Haskell

Внезапно, после очередного обновления всё сломалось. Оказалось поломали API MonadMask в exceptions: ввели обобщённый bracket и выразили через него небо и аллах. В целом идея хорошая. Непонятно только почему для него не написали дефолтную имплементацию.

Алсо недавно обнаружил что у ассоциированных с классом типофамилий могут быть параметры отличные от параметров класса. Жить сразу стало заметно легче.

А кто-нибудь уже написал генератор линз с полиморфным апдейтом на генериках? С мономорфными легко. gist.github.com — вот например вариант, который зажёвывает Proxy t и возвращает линзы в виде гетеросписка. Тут есть несколько решённых и нерешённых проблем (особенно мне нравятся отдельные инстансы для Applicative и для Functor), но в целом речь не об этом. gist.github.com — попытка проделать это же с полиморфными линзами проваливается где-то в районе инстанса для f :*: g. А всё потому что тип полученного произведения типов зависит от того какой «множитель» мы меняем. Где-то на этом месте фантазия моя подиссякла.

gist.github.com — предлагаю небольшую игру. Суть игры в том, что вы будете пытаться доказать мне что реализация легковесных регионов по ссылке неполноценна и надо взять regions, а я буду вносить правки в gist и делать вид что так и было.

Положим у меня есть тип data T f = T (forall a. f a -> a) и линза вида Lens (f x) (f x) x x, где f — полиморфный контейнер фиксированного размера. Могу я как-нибудь при помощи второго наполнить первое?