Евгений
кана
Евгений
Конечно, счётная
Egor
соре за офтоп, есть чаты какиенить по матану и дискретке?
Egor
я один задал вопрос, но чтобы дураком не казаться, не хочу больше вопрос задавать
Xeta Felius
> stack solver
Using configuration file: stack.yaml
Using cabal packages:
- .\
Using resolver: lts-9.18
Solver requires that cabal be on your PATH
Try running 'stack install cabal-install'
что-то странное. Вроде утверждается, что stack
Xeta Felius
— не надстройка над cabal
Однако оно его запросило O_o
A64m
stack solver это запускалка кабал инсталла и есть
A64m
солвера то больше нигде и нет
Евгений
кана
о, кидай
Alexander
двай
Евгений
Никого нет это не приувеличение
Евгений
@ru_catheory
Евгений
Опять у меня будет чат из 10 хаскелистов, лол
Xeta Felius
Поржите надо мной. ЧТобы добавить пакет в зависимости надо было править package.yaml, а я правил stack.yaml
кана
иногда приходится править оба файла (если package.yaml это %package%.cabal, а то такого файла я не видел)
A64m
сейчас напишут, что ни того, ни другого файла вообще не должно быть
Xeta Felius
Ну... stack.yaml регенерится при stack solver — update-config
Xeta Felius
и походу исходя из содержимого package.yaml
Андрей
есть у меня обработчики хттп запросов типа request -> io response
есть диспатчер запросов, который бегает по роутам и выбирает "правильный" обработчик
есть у полученного роута функция типа route -> request -> text -> text, которая может вернуть значение параметра
хочу чтобы обработчик запросов в итоге выглядет примерно так
somethingHandler = do
a <- param "foo"
b <- session "user_id"
return Response 200 (a + b)
проблема в чём - нет полного понимания как сделать автоматическую привязку запроса к функциям param и session и возможно ли, то есть я хочу чтобы запрос первым аргументом был
Андрей
вопрос - как?
кана
твой код например может запускаться в Reader Request Response
а param это Text -> Reader Request (Maybe Text)
Xeta Felius
кана
ну там еще IO будет, поэтому Monad m => ReaderT Request m (Maybe Text)
Андрей
кана
ну если ты хочешь читать из реквеста в монадическом стиле, то да
кана
я бы даже завернул в свою монаду и получился бы scotty
Андрей
в скотти ад какой-то с actionT
кана
ну ActionT у тебя и получится свой в итоге)
кана
а почему ад?
Xeta Felius
Блин. Вот тут во втором ответе написано редактируйте стак ямл. Не работает же. T_T
https://stackoverflow.com/questions/31030438/how-to-install-a-package-using-stack
А вот в пакадж ямл прокатило
Андрей
вообще у меня какое-то раздражение от исходников проектов на хаскеле, вот читаешь все эти на первый взгляд красивые и умные вещи про "правильную" композицию с помощью теории категорий, а потом открываешь какой-нибудь скотти и тебе кажется, что оно там используется как-то извращённо, то есть не добавляет понимания, а кажется наоборот
Alexander
Андрей
есть один большой и толстый ActionT, который делает всё
Андрей
скорее всего это из-за недостатка опыта
Xeta Felius
Андрей
кана
ну вот ActionM это просто обертка над
1) эксептом, то есть мы можем кидать и кетчить эксепшены в экшонах
2) ридером над реквестом
3) стейтом над респонсом
кана
кана
вот на хакадже - https://hackage.haskell.org/package/scotty-0.11.0/docs/src/Web-Scotty-Internal-Types.html#ActionT
Андрей
кана
https://github.com/scotty-web/scotty/blob/master/Web/Scotty/Internal/Types.hs#L138 а вот на гитхаье
кана
ну стейт прикрутили для того наверное, чтобы респонс формировать по-отдельности, а не просто return-ном, например
setHeader "header1" "2"
setHeader "header2" "3"
text "hello"
pure ()
если бы можно было респонс только возвращать, был бы ад, если бы в одной функции мы бы формировали хидеры, а в другой боди, потом бы таскали эти значения по коду, чтобы где-то в конце хендлера вернуть
кана
а state вместо writer наверное потому что нужно еще читать, что там в хидеры уже записали-то
Xeta Felius
в смысле этот язык :3
кана
ну у меня к хаскелю тьма претензий, начиная от прелюдии заканчивая рекордами, а это я пока с языком особо не работал и не знаю почти всех его проблем
Xeta Felius
С другой стороны может и добавилось уже пока я его не "трогал"
Xeta Felius
Ну рекорды да
Xeta Felius
Интересно, а какие конкретно у тебя претензии к прелюдии, и какие другие претензии?
кана
1) String через список
2) много косяков из-за того, что язык старый, а обратную совместимость поддерживать нужно, например с полугруппами (которые относительно недавно добавлены), которые "наследуются" от моноидов, а не наоборот. Или монады, которые только недавно стали наследовать от апликативов и еще и pure дублируют
3) опасные функции типа head, которые предпочитаемо должны отдавать Maybe или помечаться как unsafe
4) имена идентификаторов придуманы от балды, кто блин догадается, что first это map первого элемента бифунктора, а fst - это взять первый элемент пары
5) где-то в тайпклассах операторы, где-то текстовые имена функций [и алиасы]
6) ну base имхо попросту жирный какой-то
7) некоторые ужасно жирные тайпклассы типа Num
это вот то что сходу к прелюдии вспомнил
можно посмотреть на https://pursuit.purescript.org/packages/purescript-prelude/3.1.0, вот там все имхо близко к совершенству
Зигохистоморфный
1) String через список
2) много косяков из-за того, что язык старый, а обратную совместимость поддерживать нужно, например с полугруппами (которые относительно недавно добавлены), которые "наследуются" от моноидов, а не наоборот. Или монады, которые только недавно стали наследовать от апликативов и еще и pure дублируют
3) опасные функции типа head, которые предпочитаемо должны отдавать Maybe или помечаться как unsafe
4) имена идентификаторов придуманы от балды, кто блин догадается, что first это map первого элемента бифунктора, а fst - это взять первый элемент пары
5) где-то в тайпклассах операторы, где-то текстовые имена функций [и алиасы]
6) ну base имхо попросту жирный какой-то
7) некоторые ужасно жирные тайпклассы типа Num
это вот то что сходу к прелюдии вспомнил
можно посмотреть на https://pursuit.purescript.org/packages/purescript-prelude/3.1.0, вот там все имхо близко к совершенству
http://dev.stephendiehl.com/hask/#what-to-avoid
Зигохистоморфный
1) String через список
2) много косяков из-за того, что язык старый, а обратную совместимость поддерживать нужно, например с полугруппами (которые относительно недавно добавлены), которые "наследуются" от моноидов, а не наоборот. Или монады, которые только недавно стали наследовать от апликативов и еще и pure дублируют
3) опасные функции типа head, которые предпочитаемо должны отдавать Maybe или помечаться как unsafe
4) имена идентификаторов придуманы от балды, кто блин догадается, что first это map первого элемента бифунктора, а fst - это взять первый элемент пары
5) где-то в тайпклассах операторы, где-то текстовые имена функций [и алиасы]
6) ну base имхо попросту жирный какой-то
7) некоторые ужасно жирные тайпклассы типа Num
это вот то что сходу к прелюдии вспомнил
можно посмотреть на https://pursuit.purescript.org/packages/purescript-prelude/3.1.0, вот там все имхо близко к совершенству
ну и его protolude
кана
ну я использую universum [иначе меня уволят], который как раз на protolude базируется
Xeta Felius
1) String через список
2) много косяков из-за того, что язык старый, а обратную совместимость поддерживать нужно, например с полугруппами (которые относительно недавно добавлены), которые "наследуются" от моноидов, а не наоборот. Или монады, которые только недавно стали наследовать от апликативов и еще и pure дублируют
3) опасные функции типа head, которые предпочитаемо должны отдавать Maybe или помечаться как unsafe
4) имена идентификаторов придуманы от балды, кто блин догадается, что first это map первого элемента бифунктора, а fst - это взять первый элемент пары
5) где-то в тайпклассах операторы, где-то текстовые имена функций [и алиасы]
6) ну base имхо попросту жирный какой-то
7) некоторые ужасно жирные тайпклассы типа Num
это вот то что сходу к прелюдии вспомнил
можно посмотреть на https://pursuit.purescript.org/packages/purescript-prelude/3.1.0, вот там все имхо близко к совершенству
Хм... точно. Я и забыл что сам был частью из этого недоволен)
Xeta Felius
особенно первое
Xeta Felius
дикий трэш
кана
не ну мне решение понятно и оно красивое довольно, да и работать в принципе достаточно удобно
кана
просто это не для реального мира (да и то зависит от задач наверное))
Xeta Felius
Ну да
Xeta Felius
universim лучше гораздо и в нём нет этого говна?)
Alexander
нету хороших прелюдий
Alexander
universum нормальный
кана
ну я с ним работал не так много, но мне нравится намного лучше бейса
какое-то говно в нем наверняка есть, нужно просто найти
кана
например когда нужны кметовские линзы, а универсум экспортит микролинзы
они в принципе совместимы вроде, типы же одинаковые, просто могут быть ambiguous
Alexander
/me пользуется base в 90% случаев
Alexander
+ custom prelude под проект
Alexander
иногда
ᛏᚺᛖ ᛚᛖᛋᛒᛁᚨᚾ ᛗᚨᚾ ᚷᛁᚱᛚ 🐝
ᛏᚺᛖ ᛚᛖᛋᛒᛁᚨᚾ ᛗᚨᚾ ᚷᛁᚱᛚ 🐝
кстати
как часто нужны призмы людям?
кана
так в микролинзах есть призмы же
Alexander
зато траверсалов нету
Alexander
а траверсалы нужны
кана
в смысле нету?
кана
возможно нужны какие-то очень крутые траверсалы, я не сильно шарю в линзал, но https://hackage.haskell.org/package/microlens-0.4.8.1/docs/Lens-Micro.html#g:6
Alexander
раньше не было во всяком случае
кана
да не, траверсалы там с первой версии, как без них
ᛏᚺᛖ ᛚᛖᛋᛒᛁᚨᚾ ᛗᚨᚾ ᚷᛁᚱᛚ 🐝
хм
поспать делал что в микролинзах нет призм
окей
ᛏᚺᛖ ᛚᛖᛋᛒᛁᚨᚾ ᛗᚨᚾ ᚷᛁᚱᛚ 🐝
почему то*