Size: a a a

2021 May 03

AF

Alexey Fedotov in Haskell
Reader очень помогает, когда оказывается, что нескольким функциям в композиции нужны одни и те же данные. И чтобы они попали вниз по потоку, нужно, получается, снизу возвращать кортеж, а сверху принимать тоже кортеж, и не дай бог, между двумя функциями, которые обрабатывают это разделяемое состояние, оказывается одна, которая не обрабатывает. Тогда она получает состояние только, чтобы передать его в результат, никак не используя. А потом оказывается, что одна из этих функций работает ещё с одним состоянием, которое также нужно в той функции, которая не работает с первым разделяемым состоянием. Вот радости-то!
источник

AF

Alexey Fedotov in Haskell
У меня другой вопрос, почему монада функций называется Ридер
источник

JS

Jerzy Syrowiecki in Haskell
потому что действия могут только читать контекст и не могут писать
источник

[

[BRM]White Rabbit in Haskell
Соответственно, Writer может только скидывать значения куда-то, а State это у нас r/w, так?
источник

JS

Jerzy Syrowiecki in Haskell
так
источник

a

adam in Haskell
первый обновляет стейт по моноидным законам, врайтером можно и стейт сымитировать если исхитриться
источник

AF

Alexey Fedotov in Haskell
с RWS красиво получается, если уже написаны соответствующие типы для входа, выхода и промежуточного состояния (а в некоторых задачах они натурально получаются)
источник

JS

Jerzy Syrowiecki in Haskell
правда, очень ограниченно ридер можно менять контекст (local) и райтер может читать (listen) и менять (censor)
источник

a

adam in Haskell
а ещё такое вот есть, стоит ознакомиться
https://www.fpcomplete.com/blog/2017/06/readert-design-pattern/
источник

Y

Yuuri in Haskell
Моя любимая монада!
источник

KV

Kirill Valyavin in Haskell
А ещё можно над Reader навернуть ContT и оно сможет обновлять контекст как в State
источник

A

Aleksandr Khristenko in Haskell
А разве в таком случае все функции в этой цепочке не должны иметь тип Reader a?
источник

[

[BRM]White Rabbit in Haskell
Functor & Applicative & Monad with do-notation
источник

[

[BRM]White Rabbit in Haskell
Передают тебе привет
источник

Y

Yuuri in Haskell
Должны
источник

A

Aleksandr Khristenko in Haskell
Ну тогда в чем будет отличие от явного таскания контекста?
источник

[

[BRM]White Rabbit in Haskell
Это делается неявно
источник

Y

Yuuri in Haskell
Но в типе-то явно
источник

AS

Alexander Smirnov in Haskell
А почему хочется?
источник

Y

Yuuri in Haskell
Было Config -> a -> b, стало a -> Reader Config b или вообще MonadReader Config m -> a -> m b
источник