úÎ@M?     (c) 2017 Ertugrul SöylemezBSD3!Ertugrul Söylemez <esz@posteo.de>SafeOTfHandy type alias for the common case where the current state type and the new state type are the sameA value of type  Meter a bf can be used to update part of the current state of the progress bar by supplying a function of type  (a -> b), where a& is the type of the current value and b) is the type of the new value. See the   function for details."In most cases you can just assume a = b and use the Meter' alias.<Progress bars displaying state information of the given typeUpdate delay in microseconds Output handle Initial stateState rendererBPerform the given action while temporarily hiding the progress bar6The given action is sequenced with concurrent uses of meterIOy, so it can be used for regular output without artifacts. The function receives the output handle of the progress bar. UModify the part of the state represented by the given meter using the given function0The function receives the current value of type a7 of the meter and should return the new value of type bA. Note that for most applications those types will be the same.ÔUpdates are performed strictly, so they don't pile up when updates are throttled, unless the progress bar is disabled (because the output handle is not a terminal), in which case no state is maintained at all. STM variant of  *: modify the given meter in a transaction˜You can use this function to modify multiple meters simultaneously. This is useful, if you want to make sure that users don't observe partial updates.  Variant of   that omits the final line feed›Note: Use this function only when the given string ends with a line feed, otherwise the progress bar will overwrite its last line when it is redisplayed. ?Print the given string to the output handle of the progress bar This is implemented in terms of ³, so it does The Right Thing: it temporarily hides the progress bar, prints the string, then redisplays it. It also makes sure that concurrent messages are properly sequenced.  Variant of  -: set the given meter to the given new stateSee   for details. Variant of  >: set the given meter to the given new state in a transactionSee   for details.;Display a progress bar for the duration of the given action@Note: If the output handle is not a terminal (as determined by K), no progress bar is displayed and no state is maintained. In this case   and   are no-ops.*For most applications the simpler variant  is sufficient.Simpler variant of DUses a delay of 0.1 seconds and displays the progress bar on stderr.Zoom into part of the stateÊThis function returns a variant of the given meter that focusses on the value(s) the given setter modifies. You can use this for example to focus on a single key in a map or all the values in a list. Examples: ÿM-- Zoom into all values of a list (warning: non-strict!): zoomMeter map :: Meter' [a] -> Meter' a -- Zoom into the left component of a tuple: zoomMeter (\f (x', y) -> let x = f x' in x `seq` (x, y)) :: Meter' (a, b) -> Meter' a -- Zoom into the element indexed by the "foo" key, -- where M = Data.Map.Strict: zoomMeter (\f -> M.alter f "foo") :: Meter' (M.Map String a) -> Meter' (Maybe a) -- Variant of the previous example that always -- adds the element if it didn't exist before: zoomMeter (\f -> M.alter (Just . f) "foo") :: Meter' (M.Map String a) -> Meter (Maybe a) a Variant of B that works with van Laarhoven setters as used by libraries like  (https://hackage.haskell.org/package/lenslens: !zoomMeterL f = zoomMeter (over f)‡Keep in mind that most predefined lenses are non-strict. See the tutorial section on zooming to understand why this can be a problem. Progress bar configurationAction with a progress barInitial state valueState rendererAction with a progress bar          -progress-meter-1.0.0.1-EFuEgkzld9ADM1ACgrrU1gSystem.ProgressMeter'MeterProgress progressDelayprogressHandleprogressInitialprogressRendermeterIO modifyMetermodifyMeterSTMputMsgputMsgLnsetMeter setMeterSTM withProgress withProgress_ zoomMeter zoomMeterLbase GHC.IO.HandlehIsTerminalDevice_mModify_mRunIO