@@ -74,38 +74,42 @@ import Streamly.Internal.Data.Unbox.TH (DataCon(..))
75--------------------------------------------------------------------------------
75--------------------------------------------------------------------------------
77−-- XXX Need to make it (Maybe Inline) so that we can use Nothing as default.
79-- | Configuration to control how the 'Serialize' instance is generated. Use
77-- | Configuration to control how the 'Serialize' instance is generated. Use
80-- 'defaultConfig' and config setter functions to generate desired Config. For
78-- 'defaultConfig' and config setter functions to generate desired Config. For
81-- example:
79-- example:
83−-- >>> (inlineSize Inline) . (inlineSerialize Inlinable) defaultConfig
81+-- >>> (inlineSize (Just Inline)) . (inlineSerialize (Just Inlinable)) defaultConfig
85data Config =
83data Config =
87− { cfgInlineSize :: Inline
85+ { cfgInlineSize :: Maybe Inline
88− , cfgInlineSerialize :: Inline
86+ , cfgInlineSerialize :: Maybe Inline
89− , cfgInlineDeserialize :: Inline
87+ , cfgInlineDeserialize :: Maybe Inline
90 , cfgConstructorTagAsString :: Bool
88 , cfgConstructorTagAsString :: Bool
91 , cfgRecordSyntaxWithHeader :: Bool
89 , cfgRecordSyntaxWithHeader :: Bool
94-- | How should we inline the 'size' function? The default in 'defaultConfig'
92-- | How should we inline the 'size' function? The default in 'defaultConfig'
95−-- is 'Inline'. However, aggressive inlining can bloat the code and increase
93+-- is 'Nothing' which means left to the compiler. Forcing inline on @size@
96−-- compilation times in when there are big functions and too many nesting
94+-- function actually worsens some benchmarks and improves none.
97−-- levels so you can change it accordingly.
98−inlineSize :: Inline -> Config -> Config
95+inlineSize :: Maybe Inline -> Config -> Config
99inlineSize v cfg = cfg {cfgInlineSize = v}
96inlineSize v cfg = cfg {cfgInlineSize = v}
98+-- XXX Should we make the default Inlinable instead?
101−-- | How should we inline the 'serialize' function? See guidelines in
100+-- | How should we inline the 'serialize' function? The default in
102−-- 'inlineSize'.
101+-- 'defaultConfig' is 'Just Inline'. However, aggressive inlining can bloat the
102+-- code and increase in compilation times when there are big functions and too
103+-- many nesting levels so you can change it accordingly. A 'Nothing' value
104+-- leaves the decision to the compiler.
103−inlineSerialize :: Inline -> Config -> Config
105+inlineSerialize :: Maybe Inline -> Config -> Config
104inlineSerialize v cfg = cfg {cfgInlineSerialize = v}
106inlineSerialize v cfg = cfg {cfgInlineSerialize = v}
108+-- XXX Should we make the default Inlinable instead?
106-- | How should we inline the 'deserialize' function? See guidelines in
110-- | How should we inline the 'deserialize' function? See guidelines in
107−-- 'inlineSize'.
111+-- 'inlineSerialize'.
108−inlineDeserialize :: Inline -> Config -> Config
112+inlineDeserialize :: Maybe Inline -> Config -> Config
109inlineDeserialize v cfg = cfg {cfgInlineDeserialize = v}
113inlineDeserialize v cfg = cfg {cfgInlineDeserialize = v}
111-- | __Experimental__
115-- | __Experimental__
@@ -174,16 +178,16 @@ encodeRecordFields v cfg = cfg {cfgRecordSyntaxWithHeader = v}
175-- | The default configuration settings are:
179-- | The default configuration settings are:
177−-- * 'inlineSize' 'Inline'
181+-- * 'inlineSize' 'Nothing'
178−-- * 'inlineSerialize' 'Inline'
182+-- * 'inlineSerialize' 'Just Inline'
179−-- * 'inlineDeserialize' 'Inline'
183+-- * 'inlineDeserialize' 'Just Inline'
181defaultConfig :: Config
185defaultConfig :: Config
182defaultConfig =
186defaultConfig =
184− { cfgInlineSize = Inline
188+ { cfgInlineSize = Nothing
185− , cfgInlineSerialize = Inline
189+ , cfgInlineSerialize = Just Inline
186− , cfgInlineDeserialize = Inline
190+ , cfgInlineDeserialize = Just Inline
187 , cfgConstructorTagAsString = False
191 , cfgConstructorTagAsString = False
188 , cfgRecordSyntaxWithHeader = False
192 , cfgRecordSyntaxWithHeader = False