úÎh¦     0(c) Edward Kmett 2014-2015, Sven Panne 2009-2016BSD3 Sven Panne <svenpanne@gmail.com>stableportableSafe +13579>L2This is the class of all readable state variables.3This is the class of all updatable state variables.@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. ÿrA 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 !      !"        !"State_IOvB80WkYNkEizdt0JVpzy Data.StateVar HasGetterget HasUpdate$~$~! HasSetter$=GettableStateVarSettableStateVarStateVar makeStateVar mapStateVarmakeSettableStateVarmakeGettableStateVar$=! defaultUpdatedefaultUpdateStrict$fHasGetterIORefa$fHasGetterPtra$fHasGetterSTMa$fHasGetterIOa$fHasGetterTVara$fHasGetterStateVara$fHasUpdateTVaraa$fHasUpdateIORefaa$fHasUpdatePtraa$fHasUpdateStateVaraa$fHasSetterTVara$fHasSetterIORefa$fHasSetterPtra$fHasSetterStateVara$fHasSetterSettableStateVara