Dmitry
Похоже, нужен ещё и ночной спамочист-хаскеллист
andrei
Можно и фронтендера взять
Dmitry
Этак они хорошему научится, некому будет сайты делать
andrei
Будут делать на хаскелле
Dmitry
Нужно просто пингануть одного из модераторов
Alexander
будете делать свою прелюдию - уберите toInteger из Integral. Что он вообще там делает?
Alexander
точнее убрать надо как раз divMod
Alexander
Какой нежный, однако, язык. Без прелюдий никак...
Aliester
в расте так же
Alexander
Раст вообще молодец. Наш парень.
Alexander
ну вот обидно, что нет класса, который может в divMod, но не может в toInteger
Aleksei (astynax)
В какой-нибудь Numeric Prelude есть классы и про это (но это не точно)
andrei
Надо кольца
Alexander
они там есть
Alexander
https://hackage.haskell.org/package/numeric-prelude-0.4.3/docs/Algebra-Ring.html
Alexander
и т.д.
Alexander
Замена Free на "No Remorse" на простом сценарии с инкрементом TVar дала ухудшение с 500ns до 600ns. Нужны, вероятно, более длинные монадические цепочки, чтобы Free показал квадратичное падение, а "No Remorse" оставался линеен. Однако, если ваши STM транзакции очень длинные (длиннее, скажем, 50 строчек), значит, вы что-то не так делаете.
Alexander
длина транзакций в количестве строк..
Alexander
Ну а как их посчитать? Каждый байнд учитывать? Оценка в строчках более удобная
Alexander
И вот, кстати, мысль. Если Free в ленивом стиле байндит одну цепочку к другой, пробегая по всем элементам первой, и отсюда лезет квадрат, то что мешает вычислись результат до какой-нибудь NF (поправьте, если ошибаюсь), и получить просто линейную цепочку?
Alexander
Или я чего-то не понимаю?
Alexander
ну для free реализации это разумно, а для обычной скорее число STM операций и длина беклога
Alexander
Что такое "беклог"?
Alexander
опс, transaction log
Alexander
список действий, которые перепроверяются при коммите
Alexander
в общем-то список read-ов разных тварей (и.к. повторный read уже локальный)
Зигохистоморфный
https://github.com/jwiegley/ghc-dynamic-example
Dmitry
Добрый день! Можете подсказать как в vscode рефакторинг (HaRe?) подключить? После установки hie рефакторинга нет (может не туда смотрю?).
Anatolii
https://github.com/jwiegley/ghc-dynamic-example
Покажем кложуристам где раки зимуют, наверное
Зигохистоморфный
Покажем кложуристам где раки зимуют, наверное
или так) https://github.com/strake/hint.hs/blob/master/examples/example.hs
Aliester
реквестирую статическую кложу
Alexander
лень
Maxim
Там кстати фейсбук выкатил свой тайпчекер для питона https://pyre-check.org А вы в кложу не можете
кана
join .(N+1) liftAN - вроде как довольно частая вещь. Никто нигде не видел готового общепринятого хелпера/нейминга?
кана
liftMN уже занят, можно взять liftAMN
Maxim
Народ, а hie обязательно должен быть собран тем же компилятором, что и проект? Если я соберу его системным гхц, а проект собираю стеком со своим компилером, будет работать? Версии обоих 8.0.2
Alexander
Обязательно :(
Зигохистоморфный
мб можно под проект локально собирать
Ilya
как проапдейтить поле структуры по "вынимающей функции"? допустим, есть такой тип data Crowd a = Crowd {first :: a, second :: a, third :: a} deriving Functor type Man = forall a. Crowd a -> a хочу написать такую функцию, но не знаю как forget :: Bounded a => Man -> Crowd a -> [Crowd a] forget = undefined -- forget first (Crowd _ s t) = [(Crowd f s t) | f <- [minBound..maxBound]] в комментарии к forget пример, как она должна работать. Но я не могу заматчить first. Если type Man выбран неудачно, то какой тут нужен на самом деле?
Maxim
Обязательно :(
И как мне его собрать стеком под мой проект?
Maxim
Я до сих пор не понимаю до конца где что и зачем хранит стек
Maxim
Хоть на никс переходи
Maxim
Кстати, никс может собирать мне только хаскель, а всякие зависимости брать из системы?
Alexander
в .stack-work локальное в ,~/.stack глобальное
кана
линзы же
Maxim
в .stack-work локальное в ,~/.stack глобальное
Если в моем стек ямл и в стек ямл hie резолвер с одной и той же версией гхц, все автоматически будет так, как надо?
Ilya
линзы же
вместо Crowd может быть более сложный тип, например список или ещё хз что. Всё равно линзы?
кана
да
Ilya
спасибо, пошёл читать
Dmitry
Добавил Enum a, все прошло
Ilya
Добавил Enum a, все прошло
а что "прошло"? там undefined вместо функции
Maxim
Инфраструктура на высоте
Dmitry
undefined закомментировал. Следующую сточку раскомментировал
кана
такая функция не заработает, ну что вы
кана
какой блин матчинг по функции
кана
там first будет не тот геттер first, он любой геттер сматчит очевидно
Dmitry
это правда :-)
Ilya
какой блин матчинг по функции
ну я настолько не верил, что это сработает, что даже и пробовать не стал. но раз человек пишет, то сейчас попробую
Dmitry
я просто думал, что проблема в компиляции
Ilya
я просто думал, что проблема в компиляции
нет, проблема была апдейтить поле по заранее неизвестному аксессору
Dmitry
lens или даже generic-lens
кана
кана
в принципе даже так
кана
@Masteroid
Ilya
оно на темплейтах работает, да?
Ilya
за код спасибо, пошёл курить доки
кана
можно и без TH
кана
кана
а можно через generic-lens через generic
кана
@Masteroid - есть и моя маленькая простая реализация (которой бесконечно далеко до generic-lens, но идея понятна)
кана
Пример использования символов в хаскеле - недолинзы: https://gist.github.com/kana-sama/733e3596fe2d88a58e1dc3f73868eb8b (Есть и пакет с чем-то подобным - generic-lens, там все инстансы генерируются) вот с генерацией через generic: https://gist.github.com/kana-sama/b7f8a2a405061260a2ee7beafbd59e32
кана
lens - старые кметовские линзы для всего подряд + генерация через template haskell в generic-lens линзы уже модные профункторные, генерация через Generic трогать новичку generic-lens имхо не нужно, как показывает время компиляции, это еще игрушка могу ошибаться
кана
а нет, в generic не все профункторные
кана
но либы скорее всего совместимы между собой, generic-lens просто поставляет код для generic-генерации линз, которые можно использовать уже через функции пакета lens