git.iko.soy/typeable/xml-isogen
on master help sign in
derive NFData for all generated datatypes
965a460Denis Redozubov
src/Data/THGen/XML.hs+9−2
@@ -121,6 +121,7 @@ module Data.THGen.XML
121 , Integer
121 , Integer
122 ) where
122 ) where
123
123
124+import Control.DeepSeq
124import Control.Lens hiding (repeated, enum, (&))
125import Control.Lens hiding (repeated, enum, (&))
125import Control.Lens.Internal.FieldTH (makeFieldOpticsForDec)
126import Control.Lens.Internal.FieldTH (makeFieldOpticsForDec)
126import qualified Data.Char as C
127import qualified Data.Char as C
@@ -130,12 +131,13 @@ import Data.String
130import Data.THGen.Compat
131import Data.THGen.Compat
131import Data.THGen.Enum
132import Data.THGen.Enum
132import qualified Data.Text as T
133import qualified Data.Text as T
134+import GHC.Generics (Generic)
133import qualified Language.Haskell.TH as TH
135import qualified Language.Haskell.TH as TH
134import Prelude hiding ((+), (*))
136import Prelude hiding ((+), (*))
137+import qualified Text.XML as X
135import Text.XML.DOM.Parser
138import Text.XML.DOM.Parser
136import Text.XML.ParentAttributes
139import Text.XML.ParentAttributes
137import qualified Text.XML.Writer as XW
140import qualified Text.XML.Writer as XW
138−import qualified Text.XML as X
139
141
140data XmlFieldPlural
142data XmlFieldPlural
141 = XmlFieldPluralMandatory -- Occurs exactly 1 time (Identity)
143 = XmlFieldPluralMandatory -- Occurs exactly 1 time (Identity)
@@ -344,8 +346,13 @@ isoXmlGenerateRecord (PrefixName strName' strPrefix') descRecordParts = do
344 dataD
346 dataD
345 name
347 name
346 [TH.recC name fields]
348 [TH.recC name fields]
347− [''Eq, ''Show]
349+ [''Eq, ''Show, ''Generic]
348 lensDecls <- makeFieldOpticsForDec lensRules dataDecl
350 lensDecls <- makeFieldOpticsForDec lensRules dataDecl
351+ nfDataInst <- do
352+ TH.instanceD
353+ (return [])
354+ [t|NFData $(TH.conT name)|]
355+ [ ]
349 fromDomInst <- do
356 fromDomInst <- do
350 let
357 let
351 exprHeader = [e|pure $(TH.conE name)|]
358 exprHeader = [e|pure $(TH.conE name)|]
test/TestDefs.hs−5
@@ -6,7 +6,6 @@ module TestDefs where
6
6
7import Data.List.NonEmpty
7import Data.List.NonEmpty
8import Data.THGen.XML
8import Data.THGen.XML
9−import GHC.Generics (Generic)
10import Test.QuickCheck.Arbitrary.Generic
9import Test.QuickCheck.Arbitrary.Generic
11import Test.QuickCheck.Instances ()
10import Test.QuickCheck.Instances ()
12
11
@@ -32,14 +31,10 @@ import Test.QuickCheck.Instances ()
32"Root" =:= record
31"Root" =:= record
33 ! "Foo"
32 ! "Foo"
34
33
35−deriving instance Generic XmlRoot
36−
37instance Arbitrary XmlRoot where
34instance Arbitrary XmlRoot where
38 arbitrary = genericArbitrary
35 arbitrary = genericArbitrary
39 shrink = genericShrink
36 shrink = genericShrink
40
37
41−deriving instance Generic XmlFoo
42−
43instance Arbitrary XmlFoo where
38instance Arbitrary XmlFoo where
44 arbitrary = genericArbitrary
39 arbitrary = genericArbitrary
45 shrink = genericShrink
40 shrink = genericShrink
xml-isogen.cabal+2
@@ -34,6 +34,7 @@ library
34 build-depends: QuickCheck >= 2.8
34 build-depends: QuickCheck >= 2.8
35 , base >=4.8 && <5
35 , base >=4.8 && <5
36 , dom-parser >= 2.0.0
36 , dom-parser >= 2.0.0
37+ , deepseq
37 , lens >= 4.13
38 , lens >= 4.13
38 , mtl >= 2.2
39 , mtl >= 2.2
39 , semigroups >= 0.18
40 , semigroups >= 0.18
@@ -60,6 +61,7 @@ test-suite spec
60 build-depends: base
61 build-depends: base
61 , QuickCheck
62 , QuickCheck
62 , data-default
63 , data-default
64+ , deepseq
63 , dom-parser
65 , dom-parser
64 , generic-arbitrary
66 , generic-arbitrary
65 , hspec
67 , hspec