on master help sign in
Add some explanatory comments in Serialize TH code
356eab0Harendra Kumar
core/src/Streamly/Internal/Data/Serialize/TH.hs+9
@@ -171,6 +171,7 @@ mkSizeOfExpr headTy constructors =
171mkDeserializeExprOne :: DataCon -> Q Exp
171mkDeserializeExprOne :: DataCon -> Q Exp
172mkDeserializeExprOne (DataCon cname _ _ fields) =
172mkDeserializeExprOne (DataCon cname _ _ fields) =
173 case fields of
173 case fields of
174+ -- Only tag is serialized for unit fields, no actual value
174 [] -> [|pure ($(varE (mkName "i0")), $(conE cname))|]
175 [] -> [|pure ($(varE (mkName "i0")), $(conE cname))|]
175 _ ->
176 _ ->
176 doE
177 doE
@@ -203,12 +204,15 @@ mkDeserializeExpr headTy cons =
203 [|error
204 [|error
204 ("Attempting to peek type with no constructors (" ++
205 ("Attempting to peek type with no constructors (" ++
205 $(lift (pprint headTy)) ++ ")")|]
206 $(lift (pprint headTy)) ++ ")")|]
207+ -- Unit constructor
206 [(DataCon cname _ _ [])] ->
208 [(DataCon cname _ _ [])] ->
207 [|pure ($(varE _initialOffset) + 1, $(conE cname))|]
209 [|pure ($(varE _initialOffset) + 1, $(conE cname))|]
210+ -- Product type
208 [con] ->
211 [con] ->
209 letE
212 letE
210 [valD (varP (mkName "i0")) (normalB (varE _initialOffset)) []]
213 [valD (varP (mkName "i0")) (normalB (varE _initialOffset)) []]
211 (mkDeserializeExprOne con)
214 (mkDeserializeExprOne con)
215+ -- Sum type
212 _ ->
216 _ ->
213 doE
217 doE
214 [ bindS
218 [ bindS
@@ -228,6 +232,7 @@ mkDeserializeExpr headTy cons =
228 match
232 match
229 wildP
233 wildP
230 (normalB
234 (normalB
235+ -- XXX Print the tag
231 [|error
236 [|error
232 ("Found invalid tag while peeking (" ++
237 ("Found invalid tag while peeking (" ++
233 $(lift (pprint headTy)) ++ ")")|])
238 $(lift (pprint headTy)) ++ ")")|])
@@ -247,6 +252,7 @@ mkSerializeExprTag tagType tagVal =
247mkSerializeExprFields :: [Field] -> Q Exp
252mkSerializeExprFields :: [Field] -> Q Exp
248mkSerializeExprFields fields =
253mkSerializeExprFields fields =
249 case fields of
254 case fields of
255+ -- Unit constructor, do nothing just tag is enough
250 [] -> [|pure ($(varE (mkName "i0")))|]
256 [] -> [|pure ($(varE (mkName "i0")))|]
251 _ ->
257 _ ->
252 doE
258 doE
@@ -266,7 +272,9 @@ mkSerializeExpr headTy cons =
266 [|error
272 [|error
267 ("Attempting to poke type with no constructors (" ++
273 ("Attempting to poke type with no constructors (" ++
268 $(lift (pprint headTy)) ++ ")")|]
274 $(lift (pprint headTy)) ++ ")")|]
275+ -- Unit type
269 [(DataCon _ _ _ [])] -> [|pure ($(varE _initialOffset) + 1)|]
276 [(DataCon _ _ _ [])] -> [|pure ($(varE _initialOffset) + 1)|]
277+ -- Product type
270 [(DataCon cname _ _ fields)] ->
278 [(DataCon cname _ _ fields)] ->
271 letE
279 letE
272 [valD (varP (mkName "i0")) (normalB (varE _initialOffset)) []]
280 [valD (varP (mkName "i0")) (normalB (varE _initialOffset)) []]
@@ -277,6 +285,7 @@ mkSerializeExpr headTy cons =
277 (length fields)
285 (length fields)
278 (mkSerializeExprFields fields)
286 (mkSerializeExprFields fields)
279 ])
287 ])
288+ -- Sum type
280 _ ->
289 _ ->
281 caseE
290 caseE
282 (varE _val)
291 (varE _val)