У меня есть функция:
test :: String -> State String String
test x =
get >>= \test ->
let test' = x ++ test in
put test' >>
get >>= \test2 -> put (test2 ++ x) >>
return "test"
Я очень хорошо понимаю, что происходит во всей этой функции, и я начинаю разыгрывать монады. Я не понимаю, как, когда я запускаю это:
runState (test "testy") "testtest"
функция "get" в "тесте" каким-то образом получает начальное состояние "testtest". Может кто-то сломать это и объяснить мне?
Я ценю любые ответы!