HORIZON HASKELLDocslts/ghc-9.10.xc74966e2026-09-27Search names, modules, packages, or :: a typeCtrl K

GHC 9.10.3 · lts/ghc-9.10.x · c74966e · 2026-09-27

Moduleselective-0.7.0.1Haskell2010

Control.Selective.Rigid.Free

This is a library for selective applicative functors, or just selective functors for short, an abstraction between applicative functors and monads, introduced in this paper: https://dl.acm.org/doi/10.1145/3341694.

This module defines free rigid selective functors. Rigid selective functors are those that satisfy the property <*> = apS.

Intuitively, a selective functor f is "rigid" if any expression f a is equivalent to a list of effects chained with select operators (the normal form given by the free construction). In contrast, "non-rigid" selective functors can have non-linear, tree-like shapes, because * nodes can't be straightened using the <*> = apS equation.

  • 1 type
  • 6 values

Free rigid selective functors

2 declarations

Static analysis

5 declarations
valuegetPure :: Select f a -> Maybe a
#

Extract the resulting value if there are no necessary effects.

valuegetEffects :: Functor f => Select f a -> [f ()]
#

Collect all possible effects in the order they appear in a free selective computation.

valuegetNecessaryEffect :: Functor f => Select f a -> Maybe (f ())
#

Extract the necessary effect from a free selective computation. Note: there can be at most one effect that is statically guaranteed to be necessary.

valuerunSelect :: Selective g => (forall x. f x -> g x) -> Select f a -> g a
#

Given a natural transformation from f to g, this gives a canonical natural transformation from Select f to g.

valuefoldSelect :: Monoid m => (forall x. f x -> m) -> Select f a -> m
#

Concatenate all effects of a free selective computation.