Fusion.Plugin.Types
Documentation
A GHC annotation to inform the plugin to aggressively inline join points that perform a case match on the constructors of the annotated type. Inlining enables case-of-case transformations that would potentially eliminate the constructors.
This annotation is to be used on types whose constructors are known to be involved in case-of-case transformations enabling stream fusion via elimination of those constructors.
It is advised to use unique types for intermediate stream state that is to
be annotated with Fuse
. If the annotated type is also used for some
other purpose this annotation may inline code that is not involved in stream
fusion and should otherwise not be inlined.
{-# ANN type Step Fuse #-} data Step s a = Yield a s | Skip s | Stop
Constructors
Fuse |
Instances
Data Fuse Source # | |
Defined in Fusion.Plugin.Types Methods gfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b) -> (forall g. g -> c g) -> Fuse -> c Fuse Source # gunfold :: (forall b r. Data b => c (b -> r) -> c r) -> (forall r. r -> c r) -> Constr -> c Fuse Source # toConstr :: Fuse -> Constr Source # dataTypeOf :: Fuse -> DataType Source # dataCast1 :: Typeable t => (forall d. Data d => c (t d)) -> Maybe (c Fuse) Source # dataCast2 :: Typeable t => (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c Fuse) Source # gmapT :: (forall b. Data b => b -> b) -> Fuse -> Fuse Source # gmapQl :: (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> Fuse -> r Source # gmapQr :: forall r r'. (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> Fuse -> r Source # gmapQ :: (forall d. Data d => d -> u) -> Fuse -> [u] Source # gmapQi :: Int -> (forall d. Data d => d -> u) -> Fuse -> u Source # gmapM :: Monad m => (forall d. Data d => d -> m d) -> Fuse -> m Fuse Source # gmapMp :: MonadPlus m => (forall d. Data d => d -> m d) -> Fuse -> m Fuse Source # gmapMo :: MonadPlus m => (forall d. Data d => d -> m d) -> Fuse -> m Fuse Source # | |
Eq Fuse Source # | |