StrategyLib-4.0.0.0ContentsIndex
Data.Generics.Strafunski.StrategyLib.KeyholeTheme
Portabilityportable
Stabilityexperimental
MaintainerRalf Laemmel, Joost Visser
Contents
Focus
Listification
Keyhole versions of basic strategy combinators.
Description
This module is part of StrategyLib, a library of functional strategy combinators, including combinators for generic traversal. This module defines a number combinators for keyhole operations, i.e. for operations that have ordinary parametric or adhoc polymorhpic types, but employ strategies inside.
Synopsis
selectFocus :: (Term f, Term t) => (f -> Maybe f) -> t -> Maybe f
replaceFocus :: (Term t, Term t') => (t -> Maybe t) -> t' -> Maybe t'
deleteFocus :: (Term f, Term [f], Term t) => (f -> Maybe f) -> t -> Maybe t
selectHost :: (Term f, Term h, Term t) => (f -> Maybe f) -> (h -> Maybe h) -> t -> Maybe h
markHost :: (Term f, Term h, Term t) => (f -> Bool) -> (h -> h) -> t -> Maybe t
listify :: (Term x, Term y) => x -> [y]
strings :: Term x => x -> [String]
inj :: (MonadPlus m, Term x, Term c) => (c -> m c) -> x -> m x
Focus
selectFocus
:: (Term f, Term t)
=> (f -> Maybe f)Identify focus
-> tInput term
-> Maybe fFocused term
Select the identified focus. Fails if no subterm can be selected.
replaceFocus :: (Term t, Term t') => (t -> Maybe t) -> t' -> Maybe t'
Replace the identified focus. Fails if no subterm can be replaced.
deleteFocus
:: (Term f, Term [f], Term t)
=> (f -> Maybe f)Identify focus
-> tInput term
-> Maybe tOutput term without focused entity
Delete the focus assuming it is an element in a list. Fails if no deletion can be performed.
selectHost
:: (Term f, Term h, Term t)
=> (f -> Maybe f)Get focus
-> (h -> Maybe h)Get host
-> tInput term
-> Maybe hLocated host
Find the host of the focused entity, i.e. a superterm of the focussed subterm.
markHost
:: (Term f, Term h, Term t)
=> (f -> Bool)Test focus
-> (h -> h)Wrap host
-> tInput term
-> Maybe tOutput term
Listification
listify :: (Term x, Term y) => x -> [y]
Put all nodes of a certain type into a list.
strings :: Term x => x -> [String]
Put all nodes of type String into a list. This is a type-specialization of listify.
Keyhole versions of basic strategy combinators.
inj :: (MonadPlus m, Term x, Term c) => (c -> m c) -> x -> m x
Apply the argument function to the unique subterm of the input term. Fail if the input term has more subterms or if the subterm is not of the appropriate type. This is a keyhole version of the traversal combinator injTP
Produced by Haddock version 0.8