
Aleksey
03.07.2018
12:09:20
Позднее связывание же

Anatolii
03.07.2018
12:10:03
ну я понимаю - я поэтому и спросил
я маленькие функции часто проверяю в репле

Google

Anatolii
03.07.2018
12:10:18
и мне очень не хвататет его в других местах
*языках

Denis
03.07.2018
12:11:23

Anatolii
03.07.2018
12:11:48
в других - это у меня Го, правда я уже на нем не писал совсем месяца 3-4

Alexander
03.07.2018
12:12:01
для репла нужно или лиспом быть лиспом или много тулинга

Leonid
03.07.2018
12:12:39
Репл в хаскеле заменяет 80 юзкейзов дебагера в плюсах

Anatolii
03.07.2018
12:13:15
просто вот этот репло подход - мне кажется что если я через месяц опять сяду что-то править, то уже не вспомню что там реплах было у меня
но вот чтобы здесь и сейчас написать - конечно с реплом быстрее будет

Dmitry
03.07.2018
12:25:51
Один из юзкейзов репла: удобно было структурки данных сериализовать на лету, чтобы затем написать бинарный протокол в документации (на случай если захотят люди на других языках реализовать протокол). А сейчас репл используется, чтобы тестировать Servant-овские хэндлеры, выполняющие SQL запросы. Используется protocol-buffers, поэтому непосредственно эндпоинты потестировать какой-нибудь тулой возможности нет, а вот из репла вызвать функции и посмотреть результат вполне можно. Не то, чтобы это было очень удобно (особенно когда надо всякие сессии создать, прежде чем потестировать), но зато хотя бы как-то возможно.

M
03.07.2018
12:37:49
> Используется protocol-buffers, поэтому непосредственно эндпоинты потестировать какой-нибудь тулой возможности нет
любопытно

Alexander
03.07.2018
13:25:32
так в аллегро телеграмм работает, а линкедин нет

A64m
03.07.2018
13:26:35

Alexander
03.07.2018
13:27:39
ну мне кажется что это взлетит, но на практике я не прове?рял

Google

Alexander
03.07.2018
13:27:52
елки палки.. откуда тот смайл :/

A64m
03.07.2018
13:30:33

Index
03.07.2018
13:33:03
то есть если у меня
B depends on A v1
C depends on A v2
D depends on B, C
то не соберётся?
А раньше могло собраться?

A64m
03.07.2018
13:37:21
не, я про то когда у A одинаковые версии, а вот версии зависимостей разные
А раньше могло собраться?
емнип в самом первом демо http://blog.ezyang.com/2015/08/help-us-beta-test-no-reinstall-cabal/ это работало, а уж в планах точно было

Index
03.07.2018
13:38:50
да установить-то точно может одновременно, мне интересно, может ли попасть в один билд-план

A64m
03.07.2018
13:41:32
да, речь про один билдплан
короче говоря речь о билд планах в результате которых в программе могут быть например две несовместимые по типам байтстроки

Index
03.07.2018
13:42:44
да, я про то же
т.е. в моем примере выше допустим A=bytestring
Я просто впервые слышу, что это убрали

A64m
03.07.2018
13:44:43
просто я отдельно оговорил случай когда у A версия одна и та же, но у зависимостей разная потому, что до 7.10 гхц не умел так, но новый кабал в те времена мог построить бтилд план для 7.8 с разными байтстрингами но они должны били быть разных версий, а не просто с разными зависимостями
Может и не убрали вообще, но по умолчанию это вроде не работает теперь
возможно где-то можно включить, но я не знаю где

Alex
04.07.2018
08:36:00
Джентельмены как нужно индентится в вложенных кейсах

Yuriy
04.07.2018
08:37:16
otherwise не надо в этом месте писать, надо _
ужас какой

Alex
04.07.2018
08:38:40
Ахахаха
Я только учусь

Google

Yuriy
04.07.2018
08:38:53
вынеси по частям в обозначения в where
if на входе в функцию можно заменить на гварды
convertType t v
| "int" `isPrefixOf` t || "uint" `isPrefixOf` t = ...
| otherwise = ...
if v == "INVALID_ID" лучше будет в виде case v of "INVALID_ID" ->

Alex
04.07.2018
08:42:35
Понял
Спасибо большое!

Yuriy
04.07.2018
08:43:52
после слова case для меток веток нужен отступ, и ещё один для содержимого
case (slice 3 4 t) of
"64" ->
"64"
"32" ->
"32"
otherwise в кейсе формально может работать, но не так, как ожидается. лучше включить варнинги, чтобы компилятор указал на эту ошибку
хм, а ведь можно было бы добавить pattern Otherwise = True в прелюдию, чтобы новички не наступали на это через одного
otherwise нужен только для гвардов, то есть чтобы последним гвардом можно было написать | otherwise, и это был бы эквивалент else

Aleksey
04.07.2018
08:48:13
не, не надо!
матчинг - всегда захват наматченного. А гарды - нет!

Yuriy
04.07.2018
08:48:30

Yuriy
04.07.2018
08:48:46

Aleksey
04.07.2018
08:50:11
otherwise -> это capture. Кастомный паттерн здесь только "больше синтаксиса" сделает

Yuriy
04.07.2018
08:51:46

Aleksey
04.07.2018
08:51:46
Не хочешь матчить, делаешь _. Как везде.

Yuriy
04.07.2018
08:52:05
особенно новички, пришедшие из языков, где есть if и нет паттернматчинга

Aleksey
04.07.2018
08:52:52
tail (_:xs) = xs
tail otherwise = []
тут то очевидная дичь

Google

Aleksey
04.07.2018
08:52:59
Пусть учатся

Yuriy
04.07.2018
08:53:09

Aleksey
04.07.2018
08:54:03
Будет ворнинг. И это правильно

Admin
ERROR: S client not available

Aleksey
04.07.2018
08:54:28
скорее уж убрать otherwise вообще, пусть будет True

Yuriy
04.07.2018
08:54:31

Aleksey
04.07.2018
08:54:51
Нужно учить новичка всегда делать -Wall
А вообще - новичку тоже нужно думать, ибо полезно

Yuriy
04.07.2018
08:56:19
давайте задепрекейтим otherwise!

Aleksey
04.07.2018
08:56:24
+1
из за него ещё и раздвигать порой приходится лишнего!

Index
04.07.2018
08:57:22
в смысле раздвигать, зачем?

Aleksey
04.07.2018
08:57:43
f | x = "Foo"
| otherwise = "Bar"
фу!

Index
04.07.2018
08:57:55
Ну да, зачем так писать-то
funcname
| x = "Foo"
| otherwise = "Bar"

Aleksey
04.07.2018
08:58:41
не, HECPACUBO
Воу! Тут же не стикерят!

Google

Index
04.07.2018
08:59:26
?

Yuriy
04.07.2018
08:59:56
сорьки

Aleksey
04.07.2018
08:59:58
Если не выравниваете = - не выравнивайте нигде! Ни в рекордах, ли в let!

Index
04.07.2018
09:00:15
не, HECPACUBO
1. субъективно, мне кажется никаких проблем
2. при ренейминге не надо перевыравнивать

Aleksey
04.07.2018
09:00:43
Вот! Так норм. Консистентненько!

Index
04.07.2018
09:01:18
специально еще в том примере | сбросил на следующую строку, чтобы при переименовании функции не перевыравнивать

Aleksey
04.07.2018
09:01:35
это да, тоже так делаю

Index
04.07.2018
09:01:39
т.е. у меня правило в том, что whitespace исходника инвариантен под переименованием сущностей
(еще я табами предпочитаю индентировать, потому что их на ноуте можно постаивть в 2 пробела, а на десктопе в 4, но в принципе уже привык к пробелам, ко всему можно привыкнуть)
когда в vim или emacs подвезут elastic tabstops (никогда), то можно будет начать всё табами делать

Dmitry
04.07.2018
09:22:54
Отсутствие выравнивания и правда помогает уменьшить diff на гите и необходимость перевыравнивать при переименовывании переменных. Но часто выравнивание (лично для меня) помогает зрительно разделить код, и читать становится проще. Но да, ждем elastic tabstops...

Yuriy
04.07.2018
09:30:41