← All posts tagged Haskell

ndtimofeev

А есть в рантайме ghc костыль чтобы посмотреть на жизненный цикл всех запущенных тредов? Не... Я конечно могу написать свой async, но хотелось бы до этого не доводить.

ndtimofeev

Добавил роботу немного кококонкурентности. Процесс был очень волнительный поскольку reload был очень hot. Но оказалось что конкурентность воткнутая за пол часа работает как часы. А вот функции стандартной библиотеки я за время перекладывания бумажек с места на место забыл. Ну и логгер стал показывать не то что нужно от жизни такой. Заодно немного почистил в коде амфапарашу доставшуюся мне от меня из прошлого.

ndtimofeev

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

ndtimofeev

У меня проблема. Мне почему-то кажется, что если для типа t можно сделать (а -> b) -> t a -> t b, то и Applicative f => (a -> f b) -> t a -> f (t b) тоже можно и любой Functor — всенепременно Traversable.

ndtimofeev

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

ndtimofeev

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

ndtimofeev

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

ndtimofeev

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