Size: a a a

2020 July 14

АГ

Александр Гранин... in Haskell
Maxim Koltsov
Саш, а можешь мне помочь?
Мне надо в одном хендлере посылать внешний запрос через wreq

Как ты бы это вписал в свой фреймворк и как бы тестировал?
У меня есть такое. В моем фреймворке есть метод callAPI, который принимает минимально необходимую инфу для запроса. В интерпретаторе я зову servant-client. Могу протестировать, заменяя реальный вызов моком в тестовом интерпретаторе. Тебе такое надо?
источник

A

Andrey in Haskell
Александр Гранин
Да, ведь истинные хаскеллисты сначала потребуют матмодель смерти
именно поэтому я и воздержусь от ставок
источник

MK

Maxim Koltsov in Haskell
Александр Гранин
У меня есть такое. В моем фреймворке есть метод callAPI, который принимает минимально необходимую инфу для запроса. В интерпретаторе я зову servant-client. Могу протестировать, заменяя реальный вызов моком в тестовом интерпретаторе. Тебе такое надо?
Типа того
источник

MK

Maxim Koltsov in Haskell
То есть ты для вызова внешнего апи сделал эффект
Понятно
источник

АГ

Александр Гранин... in Haskell
Maxim Koltsov
Саш, а можешь мне помочь?
Мне надо в одном хендлере посылать внешний запрос через wreq

Как ты бы это вписал в свой фреймворк и как бы тестировал?
https://github.com/graninas/Hydra/blob/e81627882077d9f8eecf28d14279b450a2aeedad/lib/Hydra/src/Hydra/Core/Lang/Language.hs#L48

Тестовый фреймворк я пока не до конца дописал в виду нехватки времени, там не хватает обработчиков, но идея та же (и мы точно так в Juspay делаем):

https://github.com/graninas/Hydra/blob/e81627882077d9f8eecf28d14279b450a2aeedad/lib/Hydra/test-framework/Hydra/Testing/Functional/AppInterpreter.hs#L20
источник

АГ

Александр Гранин... in Haskell
Maxim Koltsov
То есть ты для вызова внешнего апи сделал эффект
Понятно
Да. Но я то же самое могу и с помощью ReaderT сделать, если в нем есть метод для вызова api
источник

MK

Maxim Koltsov in Haskell
Я не сомневаюсь
источник

MK

Maxim Koltsov in Haskell
Альтернативный вариант через runIO
источник

АГ

Александр Гранин... in Haskell
И в других подходах. Но для mtl/ft это осложняется
источник

АГ

Александр Гранин... in Haskell
Maxim Koltsov
Альтернативный вариант через runIO
Да, так тоже можно
источник

АГ

Александр Гранин... in Haskell
Yan Shkurinskiy
Шо, опять?(
Не ну а чо
источник

АГ

Александр Гранин... in Haskell
Или вы бы хотели, чтобы я вам рассказал, как изучал ТикТок по тегу Хаскель, и что я там нашел?
источник

VY

Vasiliy Yorkin in Haskell
Maxim Koltsov
нужно во флаги доктеста добавить -package-db=/nix/store/...../package.conf.d или как-то так
хм, у меня даже Build_doctests в моем проекте не собирается, Setup.hs и все остальное на месте

build-type:          Custom


tests/doctests.hs:3:1: error:
   Could not find module ‘Build_doctests’
   Use -v (or `:set -v` in ghci) to see a list of the files searched for.
 |
3 | import Build_doctests (flags, pkgs, module_sources)
 | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
make: *** [Makefile:19: test] Error 1

cabal-version 3.0
источник

VY

Vasiliy Yorkin in Haskell
ок, щас попробую но пустом проекте, так сложно разобраться уже в чем проблема, слишком много лишнего https://github.com/vyorkin/doktest-issue — вот

doctests: /nix/store/37z57sn2y84v7mz7y21dp7jzb4316v5n-ghc-8.8.3/bin/ghc-8.8.3: getPermissions:getFileStatus: does not exist (No such file or directory)

научите как им пользоваться %)
источник

A

Andrey in Haskell
Vasiliy Yorkin
хм, у меня даже Build_doctests в моем проекте не собирается, Setup.hs и все остальное на месте

build-type:          Custom


tests/doctests.hs:3:1: error:
   Could not find module ‘Build_doctests’
   Use -v (or `:set -v` in ghci) to see a list of the files searched for.
 |
3 | import Build_doctests (flags, pkgs, module_sources)
 | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
make: *** [Makefile:19: test] Error 1

cabal-version 3.0
cabal-doctest есть в зависимостях?
источник

A

Andrey in Haskell
ааа, это nix, тут не знаю
источник

VY

Vasiliy Yorkin in Haskell
тут какая-то магия с package-db, я про это ничего не знаю и очень не хочется в это лезть, тк это максимально далеко от того, чем я пытаюсь заниматься 😂 но видимо придется
источник

A

Andrey in Haskell
ну на самом деле всё просто. cabal ставит пакеты и регистрирует их в global package-db. стэк ставит в снапшот свою package-db. и проект стэка имеет ещё локальную package-db. уверен, никс тоже ставит куда-то свою package-db, её нужно идентифицировать и прописать путь к ней. кабал и стэк умеют оперировать со своими package-db.
источник

A

Andrey in Haskell
правда с никсом не понятно, куда прописывать путь, никсу, кабалу или кому-то ещё.. я не настолько с ним дружен
источник

KZ

Kirill Zaborsky in Haskell
CLI интерфейс через ghc-pkg
источник