Монада Reverse State — действительно хороший и умопомрачительный пример выразительности языка Haskell и ленивых вычислений. Но понять эту монаду не так просто. Более того, очень трудно найти убедительный пример из реальной жизни того, что с помощью монады Reverse State можно сделать проще, чем с любым другим инструментом языка.
Монада Reverse State определяется следующим образом:
newtype RState s a = RState { runRState :: s -> (a,s) }
instance Monad (RState s) where
return x = RState $ (,) x
RState sf >>= f = RState $ \s ->
let (a, past) = sf future
(b, future) = runRState (f a) s
in (b, past)
У него уже есть несколько примеров и применений, но я не нахожу их достаточно практичными.
- Ответ Quora: хорошо объяснено и даже имеет реальный пример использования, но без кода, и неясно, действительно ли это хорошая идея использовать
RState
. - Mindfuck: знакомство с этой красивой концепцией, но пример не полезно. Никто не будет писать числа Фибоначчи таким образом.
- Блог Кванга на Haskell: показывает, как
Writer
можно эмулировать с помощьюRState
но давай. Не совсем жизненный пример :)
Мне также известно о tardis
. package, но нет учебника по этой библиотеке, примеры документации действительно абстрактны, не так много людей действительно это понимают. Ближе всего к тому, что мне нужно, это это руководство, но оно пример tardis
, а не только RState
. Так же, как ссылка на эту книгу.
Таким образом, я не ищу tardis
паттернов из реальной жизни, меня интересуют только RState
иллюстрации, если это возможно. Хотя я понимаю, что образцов чистого RState
использования может и не быть. В этом случае минимальный пример с RStateT
трансформатором или tardis
достаточно хорош.
Использовал ли кто-то эту монаду в реальной жизни или у него была действительно красивая и полезная иллюстрация с кодом?
Data.Traversable.mapAccumR
. - person dfeuer   schedule 01.03.2019