Un esempio di vita reale: se sono di buon umore ("buono stato"), quando il manager mi chiede delle stime, gli do una risposta solida, ma oso farlo 3 volte in una riga, senza alcuni snack gratuiti in mezzo, il mio umore cambia (arrivo al "cattivo stato") e le prossime 3 volte che mi avvicino gli chiedo di non disturbarmi con nessuna delle sue sciocchezze.Perché la firma runState ha solo argomenti di stato?
Ecco un registro di mio solito giorno:
[ Mood: Good, Patience: 3 ] -- 11:00 am, I'm happy
ESTIMATE -> "bla bla 6", [ Mood: Good, Patience: 2 ]
ESTIMATE -> "bla bla 1", [ Mood: Good, Patience: 1 ]
Cookies! -> "", [ Mood: Good, Patience: 3 again! ]
ESTIMATE -> "bla bla 7", [ Mood: Good, Patience: 2 ]
ESTIMATE -> "bla bla 2", [ Mood: Good, Patience: 1 ]
ESTIMATE -> "bla bla 9", [ Mood: BAD , Patience: -2 ] -- Enough!
ESTIMATE -> "Need a break!" [ Mood: BAD , Patience: -1 ]
ESTIMATE -> "Deploynig!", [ Mood: BAD , Patience: 0 ]
ESTIMATE -> "Lunch time!", [ Mood: Good, Patience: 3 ] -- Ok he needs me..
ESTIMATE -> "bla bla 6", [ Mood: Good, Patience: 2 ]
...
Ora questo modello mi sembra al lavoro per adattarsi al State
Monade.
newtype State s a = State { runState :: s -> (a, s) }
Ma come si fa? La firma ha spazio per uno stato, che nel mio caso è (Mood,Patience)
e non per l'input (ESTIMATE
o Cookies
). È come se dovessi rispondere senza nemmeno ascoltare!
Quindi la mia domanda è: Come faccio a rendere non solo statico ma anche il calcolo Argumentful con State
monade di Haskell?