Strafunski-StrategyLib-5.0.1.0: Library for strategic programming

MaintainerRalf Laemmel, Joost Visser
Stabilityexperimental
Portabilityportable
Safe HaskellNone
LanguageHaskell98

Data.Generics.Strafunski.StrategyLib.OverloadingTheme

Contents

Description

This module is part of StrategyLib, a library of functional strategy combinators, including combinators for generic traversal. This module overloads basic combinators to enable uniform treatment of TU and TP strategies. The overloading scheme is motivated in the "... Polymorphic Symphony" paper. The names in the present module deviate from the paper in that they are postfixed by an "...S" in order to rule out name clashes and to avoid labour-intensive resolution. The class constraints in this module seem to be outrageous but this has to do with a type inferencing bug for class hierarchies in hugs. This bug is removed in the October 2002 release.

Synopsis

Unconstrained

class Monad m => Strategy s m where #

Overload completely unconstrained strategy combinators

Methods

voidS :: s m -> TU () m #

seqS :: TP m -> s m -> s m #

Sequential composition

passS :: TU a m -> (a -> s m) -> s m #

Sequential composition with value passing

Instances
Monad m => Strategy TP m # 
Instance details

Defined in Data.Generics.Strafunski.StrategyLib.OverloadingTheme

Methods

voidS :: TP m -> TU () m #

seqS :: TP m -> TP m -> TP m #

passS :: TU a m -> (a -> TP m) -> TP m #

Monad m => Strategy (TU a) m # 
Instance details

Defined in Data.Generics.Strafunski.StrategyLib.OverloadingTheme

Methods

voidS :: TU a m -> TU () m #

seqS :: TP m -> TU a m -> TU a m #

passS :: TU a0 m -> (a0 -> TU a m) -> TU a m #

class (Strategy s m, Monad m, Term t) => StrategyApply s m t x | s t -> x where #

Overload apply and adhoc combinators

Methods

applyS :: s m -> t -> m x #

Strategy application

adhocS :: s m -> (t -> m x) -> s m #

Dynamic type case

Instances
(Monad m, Term t) => StrategyApply TP m t t # 
Instance details

Defined in Data.Generics.Strafunski.StrategyLib.OverloadingTheme

Methods

applyS :: TP m -> t -> m t #

adhocS :: TP m -> (t -> m t) -> TP m #

(Monad m, Term t) => StrategyApply (TU a) m t a # 
Instance details

Defined in Data.Generics.Strafunski.StrategyLib.OverloadingTheme

Methods

applyS :: TU a m -> t -> m a #

adhocS :: TU a m -> (t -> m a) -> TU a m #

Involving Monoid, MonadPlus,

class (Monad m, Strategy s m) => StrategyMonoid s m where #

Overload basic combinators which might involve a monoid

Methods

skipS :: s m #

Identity (success)

allS :: s m -> s m #

Push down to all children

combS :: s m -> s m -> s m #

Combine sequentially

Instances
(Monad m, Strategy TP m) => StrategyMonoid TP m # 
Instance details

Defined in Data.Generics.Strafunski.StrategyLib.OverloadingTheme

Methods

skipS :: TP m #

allS :: TP m -> TP m #

combS :: TP m -> TP m -> TP m #

(Monad m, Monoid u, Strategy (TU u) m) => StrategyMonoid (TU u) m # 
Instance details

Defined in Data.Generics.Strafunski.StrategyLib.OverloadingTheme

Methods

skipS :: TU u m #

allS :: TU u m -> TU u m #

combS :: TU u m -> TU u m -> TU u m #

class (Strategy s m, Monad m, MonadPlus m) => StrategyPlus s m where #

Overload basic combinators which involve MonadPlus

Methods

failS :: s m #

Failure

choiceS :: s m -> s m -> s m #

Choice

oneS :: s m -> s m #

Push down to a single child

Instances
(Monad m, MonadPlus m, Strategy TP m) => StrategyPlus TP m # 
Instance details

Defined in Data.Generics.Strafunski.StrategyLib.OverloadingTheme

Methods

failS :: TP m #

choiceS :: TP m -> TP m -> TP m #

oneS :: TP m -> TP m #

(Monad m, MonadPlus m, Strategy (TU u) m) => StrategyPlus (TU u) m # 
Instance details

Defined in Data.Generics.Strafunski.StrategyLib.OverloadingTheme

Methods

failS :: TU u m #

choiceS :: TU u m -> TU u m -> TU u m #

oneS :: TU u m -> TU u m #

monoS :: (StrategyApply s m t x, StrategyPlus s m) => (t -> m x) -> s m #

Overloaded lifting with failure

Effect substitution (see EffectTheme).

class StrategyMSubst s where #

Overload msubst combinator (Experimental)

Methods

msubstS :: (Monad m, Monad m') => (forall t. m t -> m' t) -> s m -> s m' #

Substitute one monad for another

Instances
StrategyMSubst TP # 
Instance details

Defined in Data.Generics.Strafunski.StrategyLib.OverloadingTheme

Methods

msubstS :: (Monad m, Monad m') => (forall t. m t -> m' t) -> TP m -> TP m' #

StrategyMSubst (TU a) # 
Instance details

Defined in Data.Generics.Strafunski.StrategyLib.OverloadingTheme

Methods

msubstS :: (Monad m, Monad m') => (forall t. m t -> m' t) -> TU a m -> TU a m' #