Size: a a a

2017 December 10

ZK

Zheka Kozlov in Haskell Start
Ладно, всё равно так никто делать не будет, нет смысла спорить
источник

AP

Aleksei (astynax) Pirogov in Haskell Start
Там же fun.dep. Такой инстанс убъет все другие, которые захотят m == IO :)
источник

AP

Aleksei (astynax) Pirogov in Haskell Start
И всяко это будет плохое решение хотя бы "по смыслу", т.к. MonadWriter говорит, что нечто ведёт себя как Writer, т.е. собирает произвольный моноид - в этом вся мощь!
источник

AP

Aleksei (astynax) Pirogov in Haskell Start
Writer, например, отлично решает задачу "запомнить, было ли некое событие за всё время вычисления". Но почему-то часто либо берут State, либо явный флаг протаскивают в параметрах. При этом State - очевидный оверкилл, ибо предоставляет лишние для данной задачи возможности. Такие как неконтролируемое изменение стейта (во Writer (First a) нельзя забыть, что что-то уже случилось)
источник

ZK

Zheka Kozlov in Haskell Start
"запомнить, было ли некое событие за всё время вычисления" - и как это сделать через MonadWriter?
источник

ZK

Zheka Kozlov in Haskell Start
какую функцию надо использовать?
источник

AP

Aleksei (astynax) Pirogov in Haskell Start
Делаешь tell (First $ Just "foo")
источник

AP

Aleksei (astynax) Pirogov in Haskell Start
источник

AP

Aleksei (astynax) Pirogov in Haskell Start
То же самое с Last - "запоминаем, когда в последний раз что-то произошло" (если произошло)
источник

AP

Aleksei (astynax) Pirogov in Haskell Start
Внутри того же парсера иногда хочется запомнить что-то такое
источник

ZK

Zheka Kozlov in Haskell Start
А как вытащить w во время вычисления?
источник

AP

Aleksei (astynax) Pirogov in Haskell Start
Зачем?
источник

ZK

Zheka Kozlov in Haskell Start
не знаю
источник

AP

Aleksei (astynax) Pirogov in Haskell Start
listen :: m a -> m (a, w)
источник

ZK

Zheka Kozlov in Haskell Start
ok
источник

AP

Aleksei (astynax) Pirogov in Haskell Start
Только обычно это не нужно. Вот с флагом в стейте надо было бы делать get >>= \x -> put (x || smth) или modify (|| smth)
источник

AP

Aleksei (astynax) Pirogov in Haskell Start
С Writer же всё просто - ты просто всегда безусловно пишешь (tell), а уж моноид разберётся, что в итоге получится. Разделение обязанностей, асбтракция, все дела
источник

YS

Yuriy Syrovetskiy in Haskell Start
у writer есть censor, который не очень вписывается в моноид
источник

AP

Aleksei (astynax) Pirogov in Haskell Start
есть, да
источник

YS

Yuriy Syrovetskiy in Haskell Start
мы используем writer в нашем компиляторе, чтобы складывать порождённый код
источник