Alexander
или ещё кого
Alexander
опять же эффекты в реальной жизни у меня не взлетели, в проекте где они использовались до нас пришлось их выпилить, т.к. они тормозили и не приносили пользы
Alexander
а для всяких экспериментов и мелочей экосистема на тот момент была ужасна
Alexander
типа популярного пакета, который можно было с -XSafe отправить в segfault за 1 минуту анализа кода
Alexander
сейчас экосистема подрасширилась
Λrtem
ну и эффекты, они тоже решают эту проблему
что имеется в виду под эффектами?
Alexander
Algebraic Effects
Alexander
extensible-effects, freer и все это
Alexander
там целая пачка либ, но нужно внимательно смотреть что ещё поддерживают
Alexander
недавно в Haskell cafe был тред на эту тему
Alexander
но в целом mtl (tagless) подход и free/effect (tagged) выражаются друг через друга
Alexander
freer ближе к free, но tagless если мне не изменяет память
Alexander
эти вещи потормознее, т.к. тащут интерпретатор эффектов с собой
Alexander
но там наверняка есть место для исследований, как сделать это быстрее
Alexander
зачем они могут быть нужны можно смотреть в статье олега про extensible-effects
Alexander
он там показывает как некоторые юзкесы с mtl,tf выражаются излишне сложно в отличии от эффектов
Alexander
как-то так
Dmitrii
Есть еще одно решение от @int_index для решения проблемы расширяемых эффектов (если я правильно понимаю): https://github.com/int-index/caps Мы даже писали быструю маму для зависимых типов, чтобы caps работал получше и побыстрей: https://github.com/kowainik/typerep-map Надеюсь, что Влад когда-нибудь опишет более подробно свое решение, я не использовал, но хотелось бы узнать сравнение с другими подходами...
Anonymous
Victor будет жить. Поприветствуем!
Anonymous
Хай бледнолицые!
Anonymous
И сразу офтоп, может кто знает что с русскоязычным чатом о Rust случилось? Не могу его найти.
Alexander
может в @haskell_blah кто знает
Alexander
а тут обойдёмся без оффтопа, спасибо
Anonymous
Ок )
Aleksey
А кто как решает проблему error "FIXME: implement later" ?
Aleksey
постоянно забываю воткнуть реализацию а компилятор никак не предупреждает
Aleksey
можно конечно ревью, но хочется автоматически
Andrey
undefined + -Wall
Aleksey
Wall воткнут
Aleksey
а он внезапно ругается на undifined но не ругается на error ?
Alexander
{-# DEPRECATED fixme "is not allowed in production #-}
Alexander
тогда сборка с -О0 или ghci будет работать
Dmitrii
я правильно понимаю, что это получается решение, как Handle pattern, только вместо того, чтобы жить в IO и таскать структуры явно мы таскаем их в контексте?
Да, это похоже на правду. Структурка таскается в ReaderT, а еще структурка представлена как extensible record заодно, чтобы можно было и расширить в середине кода при желании
Aleksey
Alexander
завести фунцкию типа?
да, и пометить deprecated
Aleksey
прикольно
Anatolii
можно оставлять "_"
Aleksey
вот бы эту функцию еще в отдельном пакете найти
Alexander
или 1 на поиск?
Dmitrii
ага, поиск по структуре логарифм? добавление тоже или О(н)?
В качестве структуры используется typerep-map, которая реализует быстрый бинарный поиск на примитивном массиве. То есть поиск за логарифм, но с маленькой константой. А добавление за O(n).
Alexander
у меня где-то (!) не могу найти валялась структура с O(1) доступом, но О(n) модификацией
Alexander
ну и boxed только
Alexander
меня в рассылке наругали что мол с ленивостью давай лучше дерево
Alexander
это там где функция baal была для генерации меняющих тип линз
Alexander
потому что иначе ее не назовешь
Alexander
и я думаю я его пару раз вызвал
Alexander
надо будет найти и побенчмаркать
Alexander
хотя может и не надо
Alexander
но она была по типу рекордов с полями на уровне типов и.е. не то, что typemap
Aleksei (astynax)
вот бы эту функцию еще в отдельном пакете найти
В альтернативных прелюдах такое встречается. В universum что-то было похожее, еяпп
Aleksey
не комильфо в целой прелюдии такое
Alexander
можно оставлять "_"
собирается в ghci/O1?
A64m
с ключем каким-то будет собираться
Aleksei (astynax)
лучше тогда WARNING прагму юзать
Aleksei (astynax)
депрекейшн не для этого всё же
Alexander
да, можно warning
Alexander
хотя стоп, я не уверен, что у warning и deprecation одно и тоже поведение везде
Aleksei (astynax)
В доке написано, то это одно и то же
Alexander
ну ок
Aleksei (astynax)
> Causes a warning to be emitted when a module, function or type with a WARNING or DEPRECATED pragma is used.
Aleksei (astynax)
это про -Wdeprecations
Alexander
точнее чуть побольше действий
Alexander
fixme = id {-# NOINLINE fixme #-} {-# RULE do/fixme forall a . fixme a = warning a #-} warning = id {-# WARNING warning "..." #-}
Alexander
что-то такое
Alexander
assert наоборот
Dmitrii
у меня где-то (!) не могу найти валялась структура с O(1) доступом, но О(n) модификацией
Вроде у superrecord как раз O(1) быстрый доступ и за O(n) обновление http://hackage.haskell.org/package/superrecord
Alexander
там кстати через smallarray это получше
Alexander
хотя не помню поверх чего у меня было
A64m
в виниле теперь тоже есть вариант на массивах
Alexander
@chshersh спасибо кстати за ссылку на пакет, я чего-то про него и забыл сильно и похоже в некоторых местах я его с удовольствием заюзаю
Alexander
а может просто typeremap использую, если у него есть бесплатное сужение
Alexander
т.е. из R [A,B,C] мы можем получить R [A,C] бесплатно
Зигохистоморфный
есть еще type-row или как-то так
Alexander
ну я помню дизайн typeremap он мне понравился (я бы делал так же)
Зигохистоморфный
https://github.com/target/row-types
Alexander
а что там было с экстеншеном компилятора?
Alexander
не, это не то, что мне нужно
A64m
с плагином?