Alexander
вроде все просто взлетело
Kirill
и время компиляции прям никакое
Kirill
ну и про баг который Дениса укусил я вроде писал перед НГ
Alexander
ага
Alexander
у нас тайплевел ада нету
Alexander
что упрощает жизнь
Dmitry
а как вы живете без тайплевел ада? сервант вполне себе тайплевел ад. ну т.е бывает хуже. но вот
Alexander
серванта не было, до пары недель назад
Alexander
сейчас есть но там 4 эндпоинта
Alexander
ну больше но порядка 10, что совсем мало
Kirill
тормоза основные почему-то не в тайплевел аде судя по всему
Kirill
как ни странно в TH от персистента, хотя вопрос только ли TH виноват
Alexander
вот ТХ у нас много
Kirill
ну вот например
Kirill
янв 04 17:54:04 [72 of 91] Compiling Database.TLDR.Stats.Model ( src/Database/TLDR/Stats/Model.hs, .stack-work/dist/x86_64-linux-tinfo6/Cabal-2.0.1.0/build/Database/TLDR/Stats/Model.o ) янв 04 17:55:43 [73 of 91] Compiling Database.TLDR.Stats ( src/Database/TLDR/Stats.hs, .stack-work/dist/x86_64-linux-tinfo6/Cabal-2.0.1.0/build/Database/TLDR/Stats.o )
Kirill
т.е. минута сорок
Kirill
около 20 табличек
Kirill
при этом есть ещё одна "моделька" примерно такого же объёма
Kirill
и оно меньше секунды компилится
кана
такие проблемы же только на каких-нибудь изолированный сборках, в деве же можно инкрементально?
Kirill
расшифруй?
кана
ну то есть не обязательно же в деве собирать модули, которые не поменялись (следовательно и TH не нужно перезапускать)?
Alexander
когда разрабатываешь это не большая проблема, а проблема если только на CI
Kirill
про CI и речь была
Kirill
но вроде прогнал тот же билд и дельта не такая катастрофическая на том пакете
Kirill
4 минуты на 8.2 против 3 на 8.0
Kirill
при том что заявляли о том, что GHC стал быстрее
A64m
ну на их бенчмарках стал, а качество бенчмарков там и по времени компиляции и по производительности кода оставляют желать много лучшего, скажем так
A64m
а каких-то заметных изменений (в меньшую сторону) времени компиляции я бы не ждал
Aleksei (astynax)
Aleksei (astynax)
В Эльме будет больше дичи, походу
Meowbe/BSD-2-Clause
Это шутка, я надеюсь?
Кабачок
На самом деле нужны только пары, пустые кортежи и немножко синтаксического сахара
Meowbe/BSD-2-Clause
Dmitry
> На самом деле нужны только пары, пустые кортежи и немножко синтаксического сахара еще хэшмапа, 21 век же
Vitaly
Пары это синтаксический сахар над лямбдой двух аргументов же
Meowbe/BSD-2-Clause
@qnikst спам?
Alexander
fixed
Meowbe/BSD-2-Clause
👍
А как правильно написать ф-ю, которая будет: 1. Запрашивать ввод через getLine 2. Сверять его с условием (x == 1, например). Если неверно - на п.1 3. Если верно - вернуть число 2
Anatolii
Было бы хорошо скинуть что-то что уже есть в наличии
Anatolii
А тут бы уже подсказали что поправить
Anatolii
А то так сложно что-то сказать кроме как готовое написать
У меня из готового только свои исходники на Python есть :D Пытаюсь это же на Хаскеле переписать, чтобы посмотреть как оно выглядеть будет
Антон
Оно так не работает. В лоб алгоритм перенести, конечно, можно, но выглядеть будет так себе
module Main where import Control.Monad (unless) prompt :: IO () prompt = do putStrLn "Enter 1 or 2:" l <- getLine unless (l == "1" || l == "2") $ do putStrLn "Wrong number." prompt putStrLn $ "Your number is " ++ l main = prompt
Вроде того. Только в последнем выводе все введённые значения выводятся. Грубо говоря я пытаюсь понять, как без привычного while это сделать
Переписал на module Main where prompt :: IO () prompt = do putStrLn "Enter 1 or 2:" l <- getLine if l == "1" || l == "2" then putStrLn $ "Your number is " ++ l else do putStrLn "Wrong number.\n" prompt main = prompt Теперь думаю, как не распечатать, а вернуть Int из ф-и prompt
кана
pure l
кана
prompt :: IO Int prompt = do putStrLn "Enter 1 or 2:" l <- getLine if l == "1" || l == "2" then pure $ read l else do putStrLn "Wrong number.\n" prompt
Sergey
народ, как выбрать кортеж из списков кортежей, который является наибольшим по второму значению?
кана
last . sortOn snd head . reverse . sortOn snd
кана
можно еще через maximumBy maximumBy (compare `on` snd)
@kana_sama Спасибо, помогло
Dmitrii
Я бы не рекомендовал использовать функцию last. Лучше отсортировать по убыванию сразу.
Sergey
для ясности, я делаю задание для определения буквы, которая чаще всего встречается и ignoreCase
Sergey
mostFrequenceChar str = [(letter, count) | letter <- ['a'..'z'], let count = length (filter (== letter) lowerCaseStr), count > 0] where lowerCaseStr = map (toLower) str
Sergey
извиняюсь, не знаю, как красиво вставить код
Sergey
на данный момент функция производит список кортежей с частотами (буква, частота)
Антон
Обрамляй bactick'ами: `
кана
тройными
Зигохистоморфный
для ясности, я делаю задание для определения буквы, которая чаще всего встречается и ignoreCase
ты строишь гистограмму? распределения частот повторения букв?
Антон
тройными
Да. Это если на несколько строчек
Зигохистоморфный
да
group
Зигохистоморфный
да
как-то так? fmap (\x -> (head x, length x))$ group $ sort "test as test"
Sergey
да, типо этого, только ignoreCase букв и только isAlpha
Кабачок
слишком много $ и ни одного &&&
Sergey
но в любом случае, спасибо, буду разбираться)
Зигохистоморфный
слишком много $ и ни одного &&&
я мог написать так) но стрелки думал будет жестко)
Зигохистоморфный
Антон
я мог написать так) но стрелки думал будет жестко)
Да ладно, это ж просто комбинатор. Строго говоря, он вообще со стрелками не связан
Зигохистоморфный
Ignat
наверное, разумнее сначала пофильтровать, а потом уже сортировать
Кабачок
+
Кабачок
Ну и точек
Зигохистоморфный
хватит придираться)