Ein Beispiel aus dem wirklichen Leben: Wenn ich gute Laune habe ("guter Zustand"), wenn Manager mich nach Schätzungen fragt, gebe ich ihm eine solide Antwort, wagt es aber, das 3 Mal hintereinander zu tun , ohne ein paar freie Snacks zwischendurch ändert sich meine Laune (ich komme in 'schlechten Zustand') und die nächsten 3 Male, als er sich nähert, bitte ich ihn, mich nicht mit irgendeinem seiner Unsinn zu stören.Warum runState-Signatur hat nur Statusargument?
Hier ist ein Protokoll meiner üblichen Tag:
[ 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 ]
...
Nun ist dieses Modell von mir bei der Arbeit scheint die State
Monade zu passen.
newtype State s a = State { runState :: s -> (a, s) }
Aber wie mache ich das? Die Signatur hat Platz für einen Zustand, der in meinem Fall (Mood,Patience)
ist, und nicht für die Eingabe (ESTIMATE
oder Cookies
). Es ist so, als müsste ich antworten ohne zu hören!
Also meine Frage ist: Wie mache ich nicht nur Stateful sondern auch Argumentful Berechnung mit State
Monade von Haskell?