Annotations-0.2.2: Constructing, analyzing and destructing annotated trees

Safe HaskellNone
LanguageHaskell98

Annotations.MultiRec.Yield

Synopsis

Documentation

class Monad m => MonadYield m where Source #

Monads that allow yielding recursively annotated values.

Minimal complete definition

yield

Associated Types

type YieldFam m :: * -> * Source #

Yielded values have types in this datatype family.

type AnnType m :: * Source #

The type of the annotation.

Methods

yield :: YieldFam m ix -> AnnType m -> ix -> m ix Source #

Yields a value with its annotation.

Instances

(Monad m, HFunctor fam (PF fam), EqS fam, Fam fam) => MonadYield (YieldT x fam m) Source # 

Associated Types

type YieldFam (YieldT x fam m :: * -> *) :: * -> * Source #

type AnnType (YieldT x fam m :: * -> *) :: * Source #

Methods

yield :: YieldFam (YieldT x fam m) ix -> AnnType (YieldT x fam m) -> ix -> YieldT x fam m ix Source #

data YieldT x fam m a Source #

The Yield transformer. Allows yielding generic values in family fam with annotations of type x.

Instances

MonadTrans (YieldT x fam) Source # 

Methods

lift :: Monad m => m a -> YieldT x fam m a #

Monad m => Monad (YieldT x fam m) Source # 

Methods

(>>=) :: YieldT x fam m a -> (a -> YieldT x fam m b) -> YieldT x fam m b #

(>>) :: YieldT x fam m a -> YieldT x fam m b -> YieldT x fam m b #

return :: a -> YieldT x fam m a #

fail :: String -> YieldT x fam m a #

Functor m => Functor (YieldT x fam m) Source # 

Methods

fmap :: (a -> b) -> YieldT x fam m a -> YieldT x fam m b #

(<$) :: a -> YieldT x fam m b -> YieldT x fam m a #

Monad m => Applicative (YieldT x fam m) Source # 

Methods

pure :: a -> YieldT x fam m a #

(<*>) :: YieldT x fam m (a -> b) -> YieldT x fam m a -> YieldT x fam m b #

(*>) :: YieldT x fam m a -> YieldT x fam m b -> YieldT x fam m b #

(<*) :: YieldT x fam m a -> YieldT x fam m b -> YieldT x fam m a #

(Monad m, HFunctor fam (PF fam), EqS fam, Fam fam) => MonadYield (YieldT x fam m) Source # 

Associated Types

type YieldFam (YieldT x fam m :: * -> *) :: * -> * Source #

type AnnType (YieldT x fam m :: * -> *) :: * Source #

Methods

yield :: YieldFam (YieldT x fam m) ix -> AnnType (YieldT x fam m) -> ix -> YieldT x fam m ix Source #

type YieldFam (YieldT x fam m) Source # 
type YieldFam (YieldT x fam m) = fam
type AnnType (YieldT x fam m) Source # 
type AnnType (YieldT x fam m) = x

type Yield x fam = YieldT x fam Identity Source #

Yield over the identity monad.

runYield :: EqS fam => fam a -> Yield x fam a -> Maybe (AnnFix x fam a) Source #

runYieldG :: Yield x fam a -> (a, Maybe (AnyAnnFix x fam)) Source #

runYieldT :: (Monad m, EqS fam) => fam a -> YieldT x fam m a -> m (Maybe (AnnFix x fam a)) Source #

runYieldTG :: Monad m => YieldT x fam m a -> m (a, Maybe (AnyAnnFix x fam)) Source #