0(c) Edward Kmett 2014-2015, Sven Panne 2009-2014BSD3 Sven Panne <svenpanne@gmail.com>stableportable Safe-Inferred +12468=K @Transform the contents of a state variable with a given funtion.This is a variant of * which is strict in the transformed value.2This is the class of all writable state variables.(Write a new value into a state variable.bA concrete implementation of a read-only state variable is simply an IO action to read the value.hA concrete implementation of a write-only state variable, carrying an IO action to write the new value. A concrete implementation of a readable and writable state variable, carrying one IO action to read the value and another IO action to write the new value.This data type represents a piece of mutable, imperative state with possible side-effects. These tend to encapsulate all sorts tricky behavior in external libraries, and may well throw exceptions. Inhabitants should" satsify the following properties.PIn the absence of concurrent mutation from other threads or a thrown exception: do x <-  v; v  y; v  x "should restore the previous state.-Ideally, in the absence of thrown exceptions: v  a >>  v should return a, regardless of a. In practice some  Ts only permit a very limited range of value assignments, and do not report failure.  Construct a  1 from two IO actions, one for reading and one for Change the type of a   Construct a  from an IO action for writing. Construct a  from an IO action.This is a variant of ( which is strict in the value to be set." gettersetter settergetter !      !"        !"StateVar-1.1.0.0 Data.StateVar HasGetterget HasUpdate$~$~! HasSetter$=GettableStateVarSettableStateVarStateVar makeStateVar mapStateVarmakeSettableStateVarmakeGettableStateVar$=! defaultUpdatedefaultUpdateStrict$fHasGetterIORefa$fHasGetterPtra$fHasGetterSTMa$fHasGetterIOa$fHasGetterTVara$fHasGetterStateVara$fHasUpdateTVaraa$fHasUpdateIORefaa$fHasUpdatePtraa$fHasUpdateStateVaraa$fHasSetterTVara$fHasSetterIORefa$fHasSetterPtra$fHasSetterStateVara$fHasSetterSettableStateVara