Alexander
ок отлично
Alexander
[| $([|a|]) |] = [| a |] ?
Artyom
по-моему, да
Alexander
отлично
Alexander
блин я между использованиями TH успеваю его забыть
Artyom
я всегда просто пишу код, который мне нужен, потом дампаю его AST, меняю большие буквы в конструкторах на маленькие, добавляю newName в нужных местах и всё
Artyom
ну иногда ещё какая-нибудь тупая свёртка оказывается нужна, потому что в стандартной библиотеке нет -- | расставь плюсики пожалуйста sumE = foldr1 (\a b -> infixApp a [|(+)|] b) -- ^ спасибо
Alexander
мне тут достаточно много менять по сравнению с любым дампом кода
Alexander
но вроде сравился, щас посмотрю что генерит
Alexander
во, почти что надо генерит
Dmitrii
Так когда, говорите, Trees That Grow замёржат в GHC, и макросами в Haskell станет намного удобней пользоваться?
Artyom
хм-м, а я не в курсе
Artyom
почему должно стать удобней пользоваться?
Dmitrii
А когда станет удобней?( Никогда? ;(
Artyom
ну, просто я не знаю, как Trees That Grow улучшит макросы, вот мне и интересно
Dmitrii
Они уже унифируют AST между HSE и TH и GHC (как мне казалось). Может быть заодно смогут его улучшить, добавив всякие свистелки, чтобы стало удобней... Мне так казалось, но я мог ошибаться
Artyom
а, я понял
Artyom
ну это не макросы улучшатся, а HSE, пожалуй
Alexander
typed th бы и того хватило
Alexander
а то там какой-то сабсет, который фиг найдешь
Alexander
у меня [| \a -> $(something'that'will'use'a) |]
Artyom
тогда a <- newName сделай и внутри его используй в лямбде и в something'that'...
Alexander
в итоге \a заменяется на \a_0 и если я использую [|a|] то это не работает
Alexander
оно через $(varE a) используется? или есть более простые пути?
Artyom
нету можно хелпер объявить newVar s = do x <- newName s return (x, varE x, varP x) do (_, aE, aP) <- newVar "a" [| \ $aP -> ... $aE ... |]
Alexander
+
Vladislav
Привет!
Ilya
Привет, рад видеть знакомые лица!
Anonymous
че так тихо?
✙glicOne✙
Alexey
нет задач
Maxim
В хаскеле есть что-то вроде console.log во время выполнения программы?
Maxim
😁
Dmitry
print ("WUT", (show 12344))
Dmitry
trace (show ("WUT ", 1234))
Евгений
Я подозреваю, что ему нужно не из IO :)
Anatolii
trace без IO
Maxim
это я пытаюсь сделать задание со степика и не очень получается. я так понимаю потом что области неправильные и в итерации хотел посмотреть что у меня в переменной
Maxim
но наверное это неправильный подход в хаскеле
Maxim
module Integration where integration :: (Double -> Double) -> Double -> Double -> Double integration f a b = iter 0 a where steps = 1000 delta = (b - a) / steps iter acc a | a >= b = acc | otherwise = iter newAcc (a + delta) where newAcc = acc + (f a + f (a + delta)) / 2 * delta
Alexander
trace/traceM к выше, тут надо посмотреть
Alexander
что не получается то?
Alexander
не тот ответ/не проходит по времени?
Alexander
btw, раз уж количество шагов посчитано, то не проще ли по ним итерироваться, а не по a+delta копя ошибку?
Alexander
вообще если пользоваться фунциональным подходом через iterate и т.п. то может жить проще
Maxim
не тот ответ
Maxim
про iterate пока не проходил)
Нурлан
это что вы интеграл пытаетесь посчитать?
Нурлан
лучше испоьзовать foldl
Alexander
лучше не использовать foldl никогда
Alexander
foldl' или foldr
Alexander
исключение если foldl это библиотека Гонзалесова
Alexander
но внешние либы на курсах заборонены
Нурлан
лучше не использовать foldl никогда
почему? я думал он хорошо оптимизирован
Alexander
foldl как библиотека - хорошо
Alexander
как метод - плохо
Alexander
т.к. как метод это гарантировано thunk leak
Нурлан
про библиотеку я не знал
Нурлан
и вообще не нашел
Нурлан
можешь скинуть ссылку?
Vasiliy
http://hackage.haskell.org/package/foldl
Alexander
https://www.well-typed.com/blog/2014/04/fixing-foldl/
Alexander
про foldl
Alexander
перед сном хорошо почитать
Alexey
посоветуйте какую либо использовать чтобы парсить аргументы командной строки?
Dmitry
optparse-applicative
Dmitry
если очень простые, то optparse-generic но потом все равно придёт к optparse-applicative
Alexey
вот тут (https://wiki.haskell.org/Command_line_option_parsers) говорят что она не умеет конкретные ошибки показывать :(
Vasiliy
смотря какая степень конкретности нужна
Vasiliy
написать "Invalid argument `ololo'" оно может
Alexey
ясно. спасибо
Dmitry
@qnikst а имеет смысл избавляться от foldl-ов? их небось всё равно оптимизатор оптимизирует
Dmitry
т.е имеет смысл?
Oleg
валятся стэковерфлоу
Oleg
просто меняешь на foldl'
Dmitry
ничего не валится, но попроую убрать и посмотрю что получится