to post messages and comments.

← All posts tagged Haskell

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

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

А кто-нибудь уже написал генератор линз с полиморфным апдейтом на генериках? С мономорфными легко. 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 — полиморфный контейнер фиксированного размера. Могу я как-нибудь при помощи второго наполнить первое?

В догонку к #2877381. Теперь я не только не понимаю зачем линзы (на самом деле призмы) обмазаны Profunctor, но ещё и не понимаю зачем нужен Profunctor, если есть Arrow. Стрелки в принципе делают всё то же самое.

Каждый раз хочу оператор для \meval err -> maybe (Left err) Right meval. Почему в куче base нет оператора для перехода от Maybe к Either? В принципе можно обмазаться error и catch, но получится говно.

neilmitchell.blogspot.ru — Вот тут Mitchell'у пишут, что static pointer'ы не стабильны и могут меняться от сборки к сборке, что довольно сильно ограничивает применимость его идеи. Это меня в принципе не удивило, но потом я вспомнил, что static pointers extension рожали в муках для нужд cloud haskell с целью гонять по сети указатели на функцию. Так вот вопрос: как им там живётся с такими гарантиями стабильности?