Size: a a a

2020 November 23

JS

Jerzy Syrowiecki in Haskell
Gradi
Я бегаю по монге.
Для каждой базы данных, я получаю список коллекций, а для каждой коллекции — результат.
У меня получается методы:

checkDatabase :: Pipe -> Database -> ReaderT CommandLineArgs IO [CheckResult]
checkDatabase pipe db = do
   collections <- -- get collections
  mapM (checkCollection pipe db) collections

checkCollection :: Pipe -> Database -> Collection -> ReaderT CommandLineArgs IO CheckResult
checkCollection = undefined
вот mapM как раз и делает то, что надо
источник

AS

Alexander Smirnov in Haskell
А увидел
источник

G

Gradi in Haskell
Jerzy Syrowiecki
вот mapM как раз и делает то, что надо
Меня правда смущает, что я явно передаю pipe и database ниже по уровню.
Но не думаю, что мой мозг выдержит запихивать это в третью монаду поверх двух имеющихся :)
источник

MK

Maxim Koltsov in Haskell
пайп тоже можно в ридер положить
источник

JS

Jerzy Syrowiecki in Haskell
Gradi
Меня правда смущает, что я явно передаю pipe и database ниже по уровню.
Но не думаю, что мой мозг выдержит запихивать это в третью монаду поверх двух имеющихся :)
не надо третью, засуньте всё в один ReaderT
источник

к

кана in Haskell
Gradi
Меня правда смущает, что я явно передаю pipe и database ниже по уровню.
Но не думаю, что мой мозг выдержит запихивать это в третью монаду поверх двух имеющихся :)
можешь посмотреть на имплисит парамс
источник

AS

Alexander Smirnov in Haskell
Gradi
Меня правда смущает, что я явно передаю pipe и database ниже по уровню.
Но не думаю, что мой мозг выдержит запихивать это в третью монаду поверх двух имеющихся :)
/me Смотрит гна свой код со стэком из 10 монад в качестве APP
источник

JS

Jerzy Syrowiecki in Haskell
и это будет классический ReaderT IO подход
источник

JS

Jerzy Syrowiecki in Haskell
кана
можешь посмотреть на имплисит парамс
имплиситы с ридерами смешивать не надо
источник

G

Gradi in Haskell
Jerzy Syrowiecki
не надо третью, засуньте всё в один ReaderT
Но у меня в ридере аргументы командной строки (хост + мелочи). После того как готов этот ридер, я создаю пайп.
источник

к

кана in Haskell
Jerzy Syrowiecki
имплиситы с ридерами смешивать не надо
хм, я так не считаю
источник

JS

Jerzy Syrowiecki in Haskell
Gradi
Но у меня в ридере аргументы командной строки (хост + мелочи). После того как готов этот ридер, я создаю пайп.
поменяйте ридер
источник

JS

Jerzy Syrowiecki in Haskell
полностью или локально
источник

G

Gradi in Haskell
Jerzy Syrowiecki
поменяйте ридер
Имеете в виду
data CommandLineArgs = CommandLineArgs { host :: String, ...etc }

data ApplicationArgs = ApplicationArgs { commandLineArgs :: CommandLineArgs, pipe :: Pipe }


И приложение будет
1. Парсим аргументы (ReaderT CommandLineArgs)
2. Подключаемся
3. Создаём новый ридер (ReaderT ApplicationArgs)
....
?
источник

G

Gradi in Haskell
Gradi
Имеете в виду
data CommandLineArgs = CommandLineArgs { host :: String, ...etc }

data ApplicationArgs = ApplicationArgs { commandLineArgs :: CommandLineArgs, pipe :: Pipe }


И приложение будет
1. Парсим аргументы (ReaderT CommandLineArgs)
2. Подключаемся
3. Создаём новый ридер (ReaderT ApplicationArgs)
....
?
Хотя я использую Options.Applicative для работы с аргументами. Он генерирует красивую хелпу.
Может сразу запихать пайпу в CommandLine и научить Options.Applicative одновременно парсить и подключаться к бд?
источник

к

кана in Haskell
Gradi
Имеете в виду
data CommandLineArgs = CommandLineArgs { host :: String, ...etc }

data ApplicationArgs = ApplicationArgs { commandLineArgs :: CommandLineArgs, pipe :: Pipe }


И приложение будет
1. Парсим аргументы (ReaderT CommandLineArgs)
2. Подключаемся
3. Создаём новый ридер (ReaderT ApplicationArgs)
....
?
можно просто не создавать первый ридер
источник

к

кана in Haskell
спасить аргументы, подключиться, создать ридер

если коннект работает в ридере, то просто будет два runReaderT

main = do
 args <- parseArgs
 connection <- runReaderT connect args
 runReaderT app (App args connection)
источник

JS

Jerzy Syrowiecki in Haskell
Gradi
Имеете в виду
data CommandLineArgs = CommandLineArgs { host :: String, ...etc }

data ApplicationArgs = ApplicationArgs { commandLineArgs :: CommandLineArgs, pipe :: Pipe }


И приложение будет
1. Парсим аргументы (ReaderT CommandLineArgs)
2. Подключаемся
3. Создаём новый ридер (ReaderT ApplicationArgs)
....
?
да
источник

JS

Jerzy Syrowiecki in Haskell
Gradi
Хотя я использую Options.Applicative для работы с аргументами. Он генерирует красивую хелпу.
Может сразу запихать пайпу в CommandLine и научить Options.Applicative одновременно парсить и подключаться к бд?
пусть парсер только парсит
источник

JS

Jerzy Syrowiecki in Haskell
наверно, на хлистах можно красиво докидывать новые значения в контекст и искать их по типу. уже есть библиотечка для этого?
источник