Alexander
Система эффектов на открытых записях там. Ну, они ее так называют. А уж индексированный он там или нет, это вам виднее
Alexander
дает информативности же
Да нафиг это надо.
кана
ну типа просто как я помню некоторый хаскель код, в хаскеле делают точно так же
Зигохистоморфный
Да нафиг это надо.
в пурсе есть IO/IOSync и будет в 0.12 Effect без row...
Alexander
Вот делаешь ты рефакторинг, решаешь немного эффекты перераспределить. И внезапно, та функция, которую ты считал, что она не должна делать этот эффект, начинает его делать. И ты такой: ну ок, обновлю эффект, чо
кана
не используют IO напрямую, а делают N тайпклассов под конкретные задачи, у которых есть IO инстанс
Alexander
Возня с эффектами в PureScript ужасно раздражает. Тот пресловутый IO / IOSync не зря появлися. Там, кажется, эффект INFINITY какой-то используется, и все дела.
Alexander
Вот я про эффекты. Но Сервант мне тоже не очень.
я с эффектами точку равновесия не вижу
Alexander
c ним удобно новые либы писать
А пользователь этих либ должен страдать? Что ж удивляться, что хаскеллисты пишут для себя, а не для других.
Alexander
когда они приносят достаточно бонусов по сравнению с тем что за это заплатишь
Alexander
если с сервантом она ещё видна и есть понимание начиная с какой сложности лучше сразу его взять, а не переизобретать на споке, то тут сложнее
Alexander
Куча библиотек, которые не пойми как использовать. Кстати, в PureScript том же Time сделал комонадой. И пока ты этот факт не узнал, ты будешь долго искать функцию, как значение-то достать
Alexander
Что мешало сделать удобные аксессоры - неясно
Alexander
особенно в heavy IO коде, а то в эффектах поддержки асинхронных расширяемых исключений не так давно не было
Alexander
если с сервантом она ещё видна и есть понимание начиная с какой сложности лучше сразу его взять, а не переизобретать на споке, то тут сложнее
Я бы много раз подумал, прежде чем брать Сервант. А если бы взял, то не так, как мы его сейчас используем.
Alexander
ну я не вижу проблем с сервантом больших, точнее вижу, но это не те проблемы с которыми обычно столкнешься
Alexander
и.е. мне не понравилось добавлять свои Verb
Alexander
для стриминг запросов и ответтв
Alexander
где там такое?
Гм, сейчас смотрю и не нахожу 😕 Может, попутал с другим родственным типом
Alexander
и авторизацию, которая была не допилена
Alexander
о а можно ссылку
Конечно! https://hackage.haskell.org/packages/browse
кана
так вы же про пурсу говорили
Alexander
кстати о hackage вот вспоминая опыт с джавой, он на порядок полезнее чем жавадоки
Alexander
так вы же про пурсу говорили
К Хаскеллю это тоже относится...
Alexander
в которых черт ногу сломит, ничего не понятно как использовать, сложно искать и до исходников не доберешься
кана
я конкретно про time комонадой
Alexander
я конкретно про time комонадой
Пытаюсь найти. То ли Time был, то ли Date, то ли DateTime, и вроде бы в PureScript. Но не нахожу 😕
Alexander
@kana_sama @xgrommx Все, нашел, это был Locale: https://pursuit.purescript.org/packages/purescript-datetime/3.4.1/docs/Data.DateTime.Locale
Alexander
Есть там тип LocalValue, и он комонада
Alexander
c ним удобно новые либы писать
Ох, сорри, я прочитал сообщение неверно ("с ними", понимая как "эффекты"), и ответил неверно. Да, с ним удобнее, чем с эффектами. Приношу извинения
Denis
it depends
Oleg
Мне кажется, эту тему обсуждают в последнее время всюду
Alexander
BTW, я что-то не хочу быть админом
Cheese
хорошая практика — не бросать исключения там, где можешь не бросать
Cheese
а ловить ранее брошенные и переводить в Either? зачем?
Oleg
В расте всё никак не успокоятся с этой темой Try trait, try catch и подобного В скалке бушуют по поводу bifunctor IO
Dmitrii
Всем привет! Не подскажете библиотеку/пример проекта/блог-пост с очень простым примером фронтенда с Haskell в качестве бекенда? С хаскеллем проблем нет, хоть сервант могу сделать, но в том, как делать фронтенд и как связывать с бекендом, ничего не понимаю 😥 Мне хочется просто иметь несколько разных списков и возможность редактировать из UI эти списки (удалять, изменять, добавлять) и сортировать по разным полям. Короче, Google Sheets на очень сильных минималках. Дизайн не важен)
Евгений
Склепай фронтенд на elm'е (ща в меня полетят кирпичи)
jm
...если тебе не нужно ничего кроме non-persistent демок на конференциях показывать.
jm
На самом деле, все очень плохо. Я для пет проджектов использую фулл стек purescript с очень компактным и элегантным тайп-бриджем.
Dmitrii
Я-то не против elm. PureScript даже лучше! Мне бы простой пример проекта, с командами для обезьянок, как билдить (а то каждый раз страшно трогать npm)...
jm
Ну подожди, ты на бекенде именно Haskell хочешь?
jm
Если ты привязан к Haskell, то ничего умнее чем то, что мы делали в блок эксплорере карданы не придумать (пьюрскриптовский Aeson генератор и сериализация/десериализация данных). Можешь у Антэ спросить, он всё это добро мейнтейнил.
Alexander
у нас excel в web и прочее, но для фронта там typescript и бездны ада
Alexander
общение json данными
Alexander
все стандартно, разве для aeson свои хелперы чтобы он чуть поприятнее сериализацию делал
jm
А что по бойлерплейту и гарантиям?
jm
https://github.com/FrigoEU/purescript-endpoints-express Я вот этот подход использую и кайфую.
Alexander
А что по бойлерплейту и гарантиям?
никаких, может в какой-то момент добавим генерацию flow
Alexander
с другой стороны проблем на протяжении последних лет тоже не было, даже при изменении API
Maxim
блин, нежули нет какой-нибудь фишки чтобы не лифтить ио постоянно? у меня ReaderT Foo IO () , все функции превращаются в Foo{..} <- ask; liftIO $ do ..., хотя изначально хотелось все красиво на линзах запилить
Maxim
фри монады не предлагать
кана
не понял
кана
зачем лифтить
Maxim
ну в смысле. библиотека дает кучу функций в IO, мне надо гонять их в своем ридере
Maxim
приходится лифтить
кана
библиотека чужая? Или base?
Maxim
чужая
Maxim
qt
кана
ну можно написать свой модуль
Maxim
счастье какое )
кана
с бойлерплейтом
Cheese
замени ReaderT Foo IO () на Foo -> IO ()
кана
где все f = liftIO Old.f
кана
10-20 методов разово так написать не проблема же
Cheese
или bar = reader $ \Foo{..} -> do ...
Maxim
я просто ридером хотел добиться кода типа
Maxim
liftIO . foo =<< view someLens
Maxim
но лифтио бесит
Aleksei (astynax)
Ну так можно же комбинатор написать
Maxim
ой ну начинается
Maxim
допили себе язык сам )
Cheese
Aleksei (astynax)
(~<<) f l = liftIO f =<< view l
Aleksei (astynax)
foo ~<< someLens