Ilya
Что-то о пустом говорим. Содержательно было бы, если бы ты показал, как в других языках тестируют функции внутри let/where, а вот в хаскеле типа так нельзя
Dmitry
хорошая читаемость заменяет тестирование 😊
Aleksei (astynax)
Конечно нет
Aleksei (astynax)
"Глаз замыливается" и прочие человеческие ошибки сильно понижают полезность "тестирования глазами"
Alexander
лучший способ бесполезно увеличить sloccount
Dmitry
Случайно наткнулся:
https://stackoverflow.com/jobs/173703/senior-haskell-software-developer-genius-for-secucloud
(Если не по правилам, скажите, я удалю)
Dmitry
Правда, удивляет: Role: System Administrator
Alexander
а так взять вынес кучу примитивных комбинирубщих функций в топлевел, добавил бесполезных тестов и душа радуется
Alexander
и метрики
A64m
Ilya
Ilya
Где волшебным образом локальные функции покрываются юнит-тестами
Aleksei (astynax)
Можно взять язык, не умеющий в замыкания, но умеющий локальные функции :)
Aleksei (astynax)
Что-то тут переоценено
Aleksei (astynax)
Либо читаемость, либо тестируемость
A64m
ну и что волшебного, как это в принципе можно делать я выше писал, если это не работает, то это проблема конечно
A64m
(не для меня, правда, но это не важно)
Anonymous
Alexander
на TH же можно наверняка
Anonymous
Alexander
но вообще я не вижу большой необходимости в фиче
Alexander
причем не ясно почему это недостаток, и.к. те кто хочет писать тесты на все такие функции могут это делать
Alexander
причем их психологические проблемы не проецируются на всех программистов
Ilya
Aleksei (astynax)
Если речь про анализ AST и подкладывание замыкаемых переменных, то это такое
Aleksei (astynax)
Не стал бы таким пользоваться
A64m
Ilya
Aleksei (astynax)
"ну такое", как нынче говорят. Такое себе
Alexander
и вперёд
A64m
Alexander
здесь говорили что вере плохо ведь непотестировать
Alexander
вроде
A64m
да, но и о том, чтоб локальных по смыслу функций на топлевеле не было
A64m
это тут не выполняется
IC
> Allow hyphenated (à la scheme) identifiers like example-identifier, which some of us prefer to uglyCamelCase.
🤔
IC
на сколько это тяжелее парсить?
Leonid 🦇
- - валидный оператор. и так от нетагивных целых литералов проблемы
Leonid 🦇
т.е. foo - bar /= foo-bar
IC
но в итоге это проблемы токенизатора ведь?
Leonid 🦇
да. но главное токенизатор в головах!
IC
кто не отделяет операторы пробелами в коде - тот токенизатор с проблемами!
Aleksei (astynax)
> :{
Prelude| do
Prelude| print 1
Prelude| do do
Prelude| print 2
Prelude| do do
Prelude| print 3
Prelude| do do do do
Prelude| print "doh"
Prelude| :}
1
2
3
"doh"
Aleksei (astynax)
Утро узнавания интересностей об отступах в хаскеле
Aleksei (astynax)
let
x = let
y = 40
in
y + 1
z = 1
in
x + z
Зигохистоморфный
du du hast
Ю ли я? 🤔
Хм, а в TH можно сделать или имитировать, гм, "отложенную" вклейку? То есть сделать локально вроде
foo a b = bar b where
bar c = qux a
$(generateMockup 'bar)
и получить декларацию bar без замыканий где-то дальше на топлевеле.
Dmitry
A splice can occur in place of
- an expression; the spliced expression must have type Q Exp
- a pattern; the spliced pattern must have type Q Pat
- a type; the spliced expression must have type Q Type
- a list of declarations at top level; the spliced expression must have type Q [Dec]
Dmitry
декларации - только на top level
Ю ли я? 🤔
А в Q нельзя какой-то custom state запихнуть, чтобы в конце файла извлечь?
IC
@Yuu_chan какую задачу ты решаешь?
Alexander
вообще есть запихивание функций в топлевел
Alexander
в inline-java используется, но сходу не скажу как
Зигохистоморфный
https://wiki2.org/en/Lambda_lifting
Dmitry
Наверное, на топлевел не написать $(generateMockup 'foo 'bar) так как `bar не определена. Зато можно, наверное, скажем, $(generateMockup 'foo 0) - первый из where. Только с замыканиями возиться надо
Dmitry
/stat@combot
Combot
combot.org/chat/-1001043143583
A64m
проверил, работает
-- |
-- >>> :step foo 3
-- ...
-- >>> bar 2
-- 50
foo :: Int -> Int
foo x = bar x where
bar y = x + y
### Failure in src/Main.hs:7: expression `bar 2'
expected: 50
but got: 5
Examples: 2 Tried: 2 Errors: 0 Failures: 1
кана
так-так-так, это что
кана
я думал тесты через примеры в доке
очень крутая фича
Dmitry
Я не понял. Что работает и что за фича? Это haddock что ли запускает?
A64m
doctest
Sergey
в эликсире такая тож из коробки есть
Ю ли я? 🤔
И в rust
Sergey
а, да кстати)
кана
такая много где есть, но вот что она есть в хаскеле я даже не ожидал
даже не могу представить как она работает
Ю ли я? 🤔
В хаскеле есть всё 😆
A64m
вы вчера тут скриншот доктеста из линз постили
кана
ну я думал это тупо примеры
A64m
запускает ghci, загружает в него файл, вырезает из комментариев код, запускает, сравнивает выхлоп с тем что в комментариях
A64m
так и работает
Leonid 🦇
@qnikst А вы не забыли в слайдах аннотации типов проставить в этот раз? :)
Alexander
а у меня кода почти и нету
Alexander
вообще какой-то блаблабла получается :((
Leonid 🦇
норм