Denis
"Если бы ты был овцой, ты бы трахнул овцу?"
если бы был словом, то написал бы его в ворде?
Leonid 🦇
Грязный вордо-юзер, тебе с нами не по пути!
Кабачок
@catamorphism ты же либу для xlsx писал?
Denis
нет
Denis
Я по работе когда-то xlsx разбирал конечно когда-то. Но по хаскельной библиотеке вопросы стоит Kirill задавать, он автор одноименного пакета.
Кабачок
Тогда у меня больше нету вариантов, почему вопрос именно к тебе был адресован)
Кабачок
@qnikst офигенный проект, наверно даже новичкам можно показывать в кач-ве образца
Alexander
в общем под это и планировалось
Alexander
я хочу потом ещё прикольные вещи добавить типа логгера и т.п. чтобы по истории было видно,как рефакторинг идёт
Alexander
про образец, я не уверен, я люблю странные вещи
Leonid 🦇
"Энтрепрайзный irc чат на хаскеле за полтора вечера"
Denis
история в пяти коммитах
Alexander
@catamorphism не будут, но в неё можно будет тыкать
Leonid 🦇
Вступление, завязка, середина, финальный конфликт, послесловие
Leonid 🦇
Есть у кого шаблон для стэка чтоб он мне сразу делал заготовку для вебни на серванте, с трёхслойной абстракцией (в т.ч. логгер, прометеус, постгрес, парсинг конфигов и энв варов)? Ну еще заготовку для хаксл. И всё в нормально названых модулях?
Alexander
и cabal.project генерировал
Leonid 🦇
ну это я и сам
Leonid 🦇
бойлерплейта много в хаскеле слишком :(
Leonid 🦇
вона в кложе - хэшмап и вперда
Alexander
ваще позавели себе типов
Kirill
@qnikst офигенный проект, наверно даже новичкам можно показывать в кач-ве образца
У barrucadu есть учебный проект как написать dejafu, может интересно - https://github.com/barrucadu/minifu
Kirill
Плюс 2 поста в блоге
Denis
чего-то хакадж не особо отзывчив
Denis
успеха не избежали
Kirill
Фиолетовый дизайн до добра не доводит
A64m
включил в фаерфоксе костыль, который все делает черным-черным только так смог различить по цвету посещенную и непосещенную ссылку на хекедже
Alexander
Kirill прикольно
Alexander
надо таки начать писать свою прелюду с блекджеком^W бекпеком и остальным
Alexander
Роман Душкин добавился на ЛинкедИне. К чему бы это.
Alexander
И уже третий раз на Апворке пристают с предложением форкнуть Cardano, помодифицировать его и задеплоить. Третий раз отказываюсь.
Alexander
хаха
Alexander
ада то запущена
Alexander
небось я уже с неё на сок заработал, если продать
Alexander
сколько оно там щас стоит
Alexander
хрена се на сок
Alexander
~1.5k
Alexander
если продать
Alexander
если я правильно помню за сколько покупал
Leonid 🦇
~1.5k
Рублей?
Alexander
нет
Alexander
а не, меньше, надо же отнять сколько вложил в это дело
Alexander
в любом случае я так понимаю так просто их не вывести
Alexander
не понял... в общем случае в case of есть смысл, т.к. хочется посмотреть случаи по месту, функций на всех не напасёшься
Alexander
или вопрос про конкретный какой-то случай?
Denis
case просто позволяет разобрать значение по конструкторам типа
Denis
паттерны в функциях позволяют делать то же самое
Alexander
никакой разницы с т.з. компилятора нету между случаями выше
Alexander
оно в одно и тоже дешугарится
Кабачок
Как тебе нравится или принято в твоей команде
Alexander
head1 :: forall a. [a] -> a [GblId, Arity=1] head1 = \ (@ a_a1wN) (ds_X2Al :: [a_a1wN]) -> case ds_X2Al of { [] -> break<0>() error @ 'GHC.Types.LiftedRep @ a_a1wN ($dIP_r2An `cast` (Sym (GHC.Classes.N:IP[0] <"callStack">_N <GHC.Stack.Types.CallStack>_N) :: (GHC.Stack.Types.CallStack :: *) ~R# ((?callStack::GHC.Stack.Types.CallStack) :: Constraint))) (GHC.CString.unpackCString# "No head for empty lists!"#); : x_a1wB ds1_d2Al -> break<1>(x_a1wB) x_a1wB }
Alexander
vs
Alexander
head2 :: forall a. [a] -> a [GblId, Arity=1] head2 = \ (@ a_a1wO) (xs_X1wt :: [a_a1wO]) -> break<2>(xs_X1wt) case xs_X1wt of { [] -> break<0>() error @ 'GHC.Types.LiftedRep @ a_a1wO ($dIP_r2As `cast` (Sym (GHC.Classes.N:IP[0] <"callStack">_N <GHC.Stack.Types.CallStack>_N) :: (GHC.Stack.Types.CallStack :: *) ~R# ((?callStack::GHC.Stack.Types.CallStack) :: Constraint))) (GHC.CString.unpackCString# "No head for empty lists!"#); : x_a1wC ds_d2Ap -> break<1>(x_a1wC) x_a1wC }
Alexander
я отличий не вижу
Denis
отличий там нет, потому что в core только case
Denis
но тут спрашивают явно не об этом
Alexander
как выглядит лучше
Denis
если это функция - можно паттерн матчить по месту, если разбираем значение в теле функции, можно case тут же
Кабачок
Паттерн матчинг в аргументах сильно задалбывает если у функции длинное имя и аргументов много разных вариантов
Alexander
меня иногда бесит функцию кучу раз писать
Denis
я аргументы переставляю и LambdaCase юзаю
Alexander
вертикальный ввод круто конечно
Denis
в таких случаях
Влод
можно делать так: всегда стараться делать функцию с патерн матчингом тк (субъективно) красивее но иногда в скоупе уже много чего нужного накоплено (где нибудь в do) и не хочется выделять отдельную функцию куда передавать все значения из скопа и просто на месте делаешь case of
Кабачок
Есть ещё вариант longLongName = go where go (... patmat ...) = ...
Антон
Антон
Но примарх Саймон Пейтон-Джонсон с нами!
Блин, и тут вахаё... Любители вахи
A64m
завтиповая корка
Антон
бойлерплейта много в хаскеле слишком :(
А что с этим можно сделать?
Антон
завтиповая корка
А оно надо? 🤔
Denis
А что с этим можно сделать?
можно не понимать так буквально
Антон
линейные типы
А почему странные? Линейные типы нужны
A64m
А оно надо? 🤔
остальные фичи кончились, больше нечего добавлять
Alexander
Не совсем очевидный обычный Хаскель bar x | evalState (do pure () pure True) x = "" bar x | otherwise = ""
A64m
второй-то bar x можно не писать тут