Looking for haskell Keywords? Try Ask4Keywords

Haskell LanguageState Monad


Einführung

Zustandsmonaden sind eine Art Monade, die einen Zustand aufweist, der sich bei jedem Berechnungslauf in der Monade ändern kann. Implementierungen haben normalerweise die Form State sa die eine Berechnung darstellt, die einen Status vom Typ s trägt und möglicherweise modifiziert und ein Ergebnis vom Typ a . Der Begriff "State Monad" kann sich jedoch im Allgemeinen auf jede Monade beziehen, die einen State trägt. Das Paket mtl und transformers bietet allgemeine Implementierungen von Zustandsmonaden.

Bemerkungen

Haskells Neuankömmlinge scheuen sich oft vor der State Monade und behandeln sie wie ein Tabu - wie der behauptete Vorteil der funktionalen Programmierung ist die Vermeidung des Staates. Verlieren Sie das also nicht, wenn Sie State ? Eine differenziertere Ansicht ist die:

  • Zustand kann in kleinen, kontrollierten Dosen nützlich sein;
  • Der State bietet die Möglichkeit, die Dosis sehr genau zu steuern.

Die Gründe sind, dass, wenn Sie action :: State sa , dies Folgendes sagt:

  • action ist etwas Besonderes, weil sie von einem Staat abhängt;
  • Der Status hat s , so dass die action nicht durch einen alten Wert in Ihrem Programm beeinflusst werden kann - nur ein s oder ein von einigen s erreichbarer Wert.
  • runState :: State sa -> s -> (a, s) eine "Barriere" um die zustandsbehaftete Aktion, so dass ihre Wirksamkeit nicht von außerhalb dieser Barriere beobachtet werden kann.

Dies ist also ein guter Satz von Kriterien für die Verwendung von State in einem bestimmten Szenario. Sie möchten sehen, dass Ihr Code den Umfang des Status minimiert , indem Sie einen schmalen Typ für s runState und runState so nahe wie möglich an "bottom" setzen (so dass Ihre Aktionen durch so wenig wie beeinflusst werden können) möglich.

State Monad Verwandte Beispiele