История изменений
Исправление red75prim, (текущая версия) :
ReaderT протягивает состояние по умолчанию, а вот менять его нужно явно.
first :: a -> ReaderT Config IO a
first a = do
return ...
second :: a -> a -> ReaderT Config IO a
second a b = do
return ...
myFunc :: a -> a -> ReaderT Config IO a
myFunc a b = do
liftIO $ ... // Сделать что-то в IO монаде
liftIO $ ... // Сделать ещё что-то в IO монаде
config <- ask
result <-
if some_condition config
// first использует ту же конфигурацию что и my_func
then first ...
// меняем конфигурацию для second
else local (changeConfigFunc) $ second ...
return result
main = do
...
config <- readConfigFromFile
...
result <- runReaderT (myFunc ...) config
В коде могут быть ошибки. Давно с Haskell дела не имел.
Исходная версия red75prim, :
ReaderT протягивает состояние по умолчанию, а вот менять его нужно явно.
first :: a -> ReaderT Config IO a
first a = do
return ...
second :: a -> a -> ReaderT Config IO a
second a b = do
return ...
myFunc :: a -> a -> ReaderT Config IO a
myFunc a b = do
config <- ask
result <-
if some_condition config
// first использует ту же конфигурацию что и my_func
then first ...
// меняем конфигурацию для second
else local (changeConfigFunc) $ second ...
return result
main = do
...
config <- readConfigFromFile
...
result <- runReaderT (myFunc ...) config
В коде могут быть ошибки. Давно с Haskell дела не имел.