| Copyright | (c) 2020 Composewell Technologies |
|---|---|
| License | BSD-3-Clause |
| Maintainer | pranaysashank@composewell.com |
| Stability | experimental |
| Portability | GHC |
| Safe Haskell | Safe |
| Language | Haskell2010 |
Fusion.Plugin.Types
Description
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
| Eq Fuse Source # | |
| 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 # gunfold :: (forall b r. Data b => c (b -> r) -> c r) -> (forall r. r -> c r) -> Constr -> c Fuse # dataTypeOf :: Fuse -> DataType # dataCast1 :: Typeable t => (forall d. Data d => c (t d)) -> Maybe (c Fuse) # dataCast2 :: Typeable t => (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c Fuse) # gmapT :: (forall b. Data b => b -> b) -> Fuse -> Fuse # gmapQl :: (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> Fuse -> r # gmapQr :: (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> Fuse -> r # gmapQ :: (forall d. Data d => d -> u) -> Fuse -> [u] # gmapQi :: Int -> (forall d. Data d => d -> u) -> Fuse -> u # gmapM :: Monad m => (forall d. Data d => d -> m d) -> Fuse -> m Fuse # gmapMp :: MonadPlus m => (forall d. Data d => d -> m d) -> Fuse -> m Fuse # gmapMo :: MonadPlus m => (forall d. Data d => d -> m d) -> Fuse -> m Fuse # | |