Ilya
только сортировки на swap`ах
Alexander
я думаю подсчетом не уклыдвается в сигнатуру где попросят перестановку на выходе
Alexander
т.е. это другой класс
Alexander
что не удивительно, т.к. там ты требуешь новую операции над элементами
Bohdan
Optparse applicative
А что, в хачкеле есть ограничения на переносы и отступы, как в пайтоне? Объявляю strOption, ставлю закрывающую скобку отдельной строкой — parse error. Сливаю с предыдущей строкой — компилится. Треш какой-то
Aleksei (astynax)
Отступы играют роль, да
Aleksei (astynax)
Если переносишь на другую строку, то отступ должен быть увеличен
Aleksei (astynax)
Впрочем, можно писать с {, } и ; :)
Bohdan
И execParser возвращает кортеж, получается? Из него можно достать конкретный аргумент по имени?
Aleksei (astynax)
fst / snd
Aleksei (astynax)
или через паттерн матчинг
Aleksei (astynax)
let (foo, bar) = execParser ...
Aleksei (astynax)
execParser возвращает то, что конструирует аппликатив - потому и -applicative в имени пакета
Aleksei (astynax)
Если пасер вернет record, то и доступ к опциям будет по имени (по имени поля рекорда)
Aleksei (astynax)
Прямо в README у optparse-applicative есть пример
Vasiliy
execParser тащемта IO возвращает
Bohdan
Хм, что-то System.Random теперь отвалился
Vasiliy
но a внутре IO a - тот, что конструируется аппликативом
Bohdan
Не импортится, хотя поставлен и на предыдущем коммите компилилось
Bohdan
Мде, и после отката не компилится, по ходу, cabal пакет потерял, это как вообще?
Ilya
Отступы играют роль, да
а вот интересно, почему нельзя было сделать доступными локальные синонимы в do-нотации
Ilya
вроде же не такая сложная штука?
Ilya
т.е. where не в конце, а где-нибудь в середине, по месту надобности
Ilya
ну про let я знаю, если что
Ilya
то есть let есть, а where нет, как-то странно
кана
Ну лет - выражение же
кана
where же - захардкоренный синтаксический стейтмент
Ilya
да, я понимаю:) что трудно придумать рассахаренную версию такого локального where
Ilya
но почему вообще это должно быть решающим фактором
Ilya
возможность развернуть любую do-нотацию в >>= и >>
Alexander
foo = do
bar baz
where baz = ....
qux doox
where doox = ...
where
doox = ...
?
Alexander
такое что-то?
Cheese
Alexander
я пытаюсь понять этого ли хочет @Masteroid
Alexander
или это про то, что у меня 2 первые where на разном уровне?
Alexander
то, что я напсал не поддерживается
Alexander
я спрашиваю, такое ли хочется
Ilya
хочется как во втором варианте здесь
Ilya
так работает
main = do
x <- f
print x
where f = readLn :: IO Int
а так нет
main = do
x <- f
where f = readLn :: IO Int
print x
кана
Я правильно понимаю, что все, что в where, будет видно всему коду выше ?
Ilya
у меня да
Ilya
в первом варианте
кана
do
f a
f b where a = 1
f c
where f x = ...
Aleksei (astynax)
не надо такого, это попахивает жаваскриптом!
кана
Не очень понимаю, зачем это нужно, если есть лет, который субъективно лучше читается
кана
Я с каждым днем лучше и лучше понимаю Эвана, который отказывается впилить where в элм
Aleksei (astynax)
let в do понятно рассахаривается - слева-направо сверху-вниз
Aleksei (astynax)
where нормально смотрится вне тела функции, т.к. не является выражением
Aleksei (astynax)
@Masteroid как должен рассахариваться where в середине do при условии, что where не может быть частью выражения?
Ilya
да, я понимаю:) что трудно придумать рассахаренную версию такого локального where
Ilya
но почему вообще это должно быть решающим фактором
Ilya
возможность развернуть любую do-нотацию в >>= и >>
Aleksei (astynax)
Потому что это говорит об отсутствии магии.
Aleksei (astynax)
Есть чуть другая форма записи, но то что является выражением (do - является) - им и остаётся.
Aleksei (astynax)
Если хочется where в do, то почему бы тогда let не убрать вообще? И data разрешить внутри do
Aleksei (astynax)
И классы с инстансами и импорты!
Aleksei (astynax)
И получим s/говно/питон/
Aleksei (astynax)
f :: D -> D
f = do
data D = Foo | Bar
g :: D -> D
g Foo = Bar
g Bar = Foo
export D
g . g
Aleksei (astynax)
не хочу такое
Aleksei (astynax)
Процедурный код в определениях попахивает Скалкой. За ним - туда
Misha
а чо, как будто что-то плохое
Misha
я вот очень хочу data внутри функций
Anonymous
и во что оно будет превращаться?
Cheese
да, в Скале это плохое. так можно легко обратиться к неинициализированной переменной
Ilya
а вот кстати, по-моему в идрисе над do-нотацией как-то поиздевались^W улучшили?
Ilya
расскажите, кто в курсе
Ilya
че там
Vasiliy
можно сказать, там по-дефолту включён RebindableSyntax
кана
Тож интересно. Знаю, что можно как-то самому определять поведение + всякие something x in y работают с до как лет
do
let x = 1
rewrite z
..
Alexander
@Masteroid можно определить (») для своего типа
Ilya
Alexander
ну можно для всякой дурости типа моноид через do:
do "aa"
"bb"
"aa,bb"
Alexander
я думаю @voidlizard бы обрадовался, ему я помню приходилось часто делать monad только ради того, чтобы do-notation был, например в emut-fat
Alexander
плюс для отладки можно использовать, можно пример в ditrsibuted-process-test посмотреть, там автоматом лог событий пишется
Aleksei (astynax)
Э... ApplicativeDo же, не?
Alexander
когда-то его не было