HORIZON HASKELLDocslts/ghc-10.0.x8c2f8e82026-10-19Search names, modules, packages, or :: a typeCtrl K

GHC 10.0.0.20260917 · lts/ghc-10.0.x · 8c2f8e8 · 2026-10-19

Modulefused-effects-1.1.2.7Haskell2010

Control.Effect.State.Labelled

Labelled State operations.

  • 3 types
  • 1 class
  • 7 values

State effect

7 declarations
datadata State s (m :: Type -> Type) k where
#
Instances9Algebra, …
valuemodify :: HasLabelled label (State s) sig m => (s -> s) -> m ()
#

Replace the state value with the result of applying a function to the current state value. This is strict in the new state.

modify f = get >>= (put . f $!)
valuemodifyLazy :: HasLabelled label (State s) sig m => (s -> s) -> m ()
#

Replace the state value with the result of applying a function to the current state value. This is lazy in the new state; injudicious use of this function may lead to space leaks.

modifyLazy f = get >>= put . f

Re-exports

4 declarations
classclass Monad m => Algebra (sig :: (Type -> Type) -> Type -> Type) (m :: Type -> Type) | m -> sig where
#

The class of carriers (results) for algebras (effect handlers) over signatures (effects), whose actions are given by the alg method.

Instances53Algebra, …
typetype Has (eff :: (Type -> Type) -> Type -> Type) (sig :: (Type -> Type) -> Type -> Type) (m :: Type -> Type) = (Members eff sig, Algebra sig m)
#

m is a carrier for sig containing eff.

Note that if eff is a sum, it will be decomposed into multiple Member constraints. While this technically allows one to combine multiple unrelated effects into a single Has constraint, doing so has two significant drawbacks:

  1. Due to a problem with recursive type families, this can lead to significantly slower compiles.

  2. It defeats ghc’s warnings for redundant constraints, and thus can lead to a proliferation of redundant constraints as code is changed.

typetype HasLabelled (label :: k) (eff :: (Type -> Type) -> Type -> Type) (sig :: (Type -> Type) -> Type -> Type) (m :: Type -> Type) = (LabelledMember label eff sig, Algebra sig m)
#

m is a carrier for sig containing eff associated with label.

Note that if eff is a sum, it will not be decomposed into multiple LabelledMember constraints. While this technically is possible, it results in unsolvable constraints, as the functional dependencies in Labelled prevent assocating the same label with multiple distinct effects within a signature.

valuerun :: Identity a -> a
#

Run an action exhausted of effects to produce its final result value.