fusion-plugin-types-0.1.0: Types for the fusion-plugin package.

Copyright(c) 2020 Composewell Technologies
LicenseBSD-3-Clause
Maintainerpranaysashank@composewell.com
Stabilityexperimental
PortabilityGHC
Safe HaskellSafe
LanguageHaskell2010

Fusion.Plugin.Types

Description

 
Synopsis

Documentation

data Fuse Source #

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 # 
Instance details

Defined in Fusion.Plugin.Types

Methods

(==) :: Fuse -> Fuse -> Bool #

(/=) :: Fuse -> Fuse -> Bool #

Data Fuse Source # 
Instance details

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 #

toConstr :: Fuse -> Constr #

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 #