Я так стараюсь обернуть голову вокруг Государственной Монады, и я не понимаю следующее:
Учитывая реализацию return
и (>>=)
, когда вы говорите State $ \s ->....
, откуда берется s
? Я имею в виду, когда вы начинаете выполнять >>= ... >>=
, разве это не значит, что где-то в начале вашей цепочки вы как-то должны указывать этот начальный параметр?
newtype State s a=State { runState::s->(a,s) }
instance Monad (State s) where
return a=State $ \s->(a,s)
(>>=) m g=State $ \s -> let (a,s')= runState m s in
runState (g a) s'
В (>>=)
вы говорите State $ \s -> runState m s
, и я не получаю , когда называется тот начальный (\s -> ...) argument
(с REAL argument
)?
Может кто-нибудь объяснить, пожалуйста?
Позже Редактировать :
Может кто-нибудь показать мне, как будет установлено состояние initial
, скажем, если ему нужно получить значение, используя getLine
?
main::IO()
main=do
argument<-getLine
--how do i set initial state with argument?
m >> f1 >> f2 >> f3