module Data.Packed.TH (
mkPacked,
PackingFlag (..),
genCase,
genPackableInstance,
genConstructorPackers,
genConstructorRepackers,
genWrite,
genConWrite,
genStart,
genUnpackableInstance,
genRead,
genSkippableInstance,
genSkip,
genTransform,
Tag,
) where
import Data.Packed.TH.Case
import Data.Packed.TH.Flag
import Data.Packed.TH.PackCon (genConstructorPackers)
import Data.Packed.TH.Packable
import Data.Packed.TH.Read
import Data.Packed.TH.RepackCon
import Data.Packed.TH.Skip
import Data.Packed.TH.Skippable (genSkippableInstance)
import Data.Packed.TH.Start
import Data.Packed.TH.Transform (genTransform)
import Data.Packed.TH.Unpackable
import Data.Packed.TH.Utils
import Data.Packed.TH.Write
import Data.Packed.TH.WriteCon
import Language.Haskell.TH
mkPacked ::
Name ->
[PackingFlag] ->
Q [Dec]
mkPacked :: Name -> [PackingFlag] -> Q [Dec]
mkPacked Name
tyName [PackingFlag]
flags = do
caseFunction <- [PackingFlag] -> Name -> Q [Dec]
genCase [PackingFlag]
flags Name
tyName
packableInstance <- genPackableInstance flags tyName
unpackableInstance <- genUnpackableInstance flags tyName
constructorPackers <- genConstructorPackers flags tyName
constructorRepackers <- genConstructorRepackers flags tyName
skipInstance <- genSkippableInstance flags tyName
transformFunction <- genTransform flags tyName
return $
caseFunction
++ packableInstance
++ unpackableInstance
++ constructorPackers
++ constructorRepackers
++ skipInstance
++ transformFunction