This module contains some utility functions that build on the
core interface of `Stepwise`

computations.

Todo: nicer abstractions for specific merge-patterns.

- localChoice :: (i w -> Stepwise e i o w a -> i w -> Stepwise e i o w a -> Stepwise e i o w a) -> (e -> e -> Stepwise e i o w a) -> Stepwise e i o w a -> Stepwise e i o w a -> Stepwise e i o w a
- mergeSteps :: (Monoid (i w), Monoid e, Error e) => i w -> Stepwise e i o w a -> i w -> Stepwise e i o w a -> Stepwise e i o w a
- globalChoice :: Error e => (forall v. Stepwise e i Lazy v a) -> (forall v. Stepwise e i Lazy v a) -> Stepwise e i o w a

# Documentation

localChoice :: (i w -> Stepwise e i o w a -> i w -> Stepwise e i o w a -> Stepwise e i o w a) -> (e -> e -> Stepwise e i o w a) -> Stepwise e i o w a -> Stepwise e i o w a -> Stepwise e i o w aSource

Chooses locally: i.e. does not allow a lookahead beyond the current computation. A subcomputation does not see beyond the current choice.

mergeSteps :: (Monoid (i w), Monoid e, Error e) => i w -> Stepwise e i o w a -> i w -> Stepwise e i o w a -> Stepwise e i o w aSource

Merges two steps into a single step, thereby making use of the monoid instance.

globalChoice :: Error e => (forall v. Stepwise e i Lazy v a) -> (forall v. Stepwise e i Lazy v a) -> Stepwise e i o w aSource

Global choice. Takes the computation with the shortest sequence of reports that succeeds, or the longest that fails. First parameter is a transcoder that translates reports to the final domain.