git.iko.soy/typeable/xml-isogen
on master help sign in
Add compatibility with GHC 8
commitc43f7f4e9f2d687f59223ecd8448d82b063fc141 authorDmitry Bushev <bushevdv@gmail.com> dateThu 14 Sep 2017, 18:44 (9 years ago) parentec5c15b
8 files changed+64−15
ghc-802.yaml+7 ghc-821.yaml+7 src/Data/THGen/Compat.hs+38 src/Data/THGen/Enum.hs+3−4 src/Data/THGen/XML.hs+4−5 stack.yaml+3−5 test/Main.hs+1 xml-isogen.cabal+1−1
ghc-802.yamlnew file+7
@@ -0,0 +1,7 @@
1+resolver: lts-9.0
2+
3+packages:
4+- .
5+
6+extra-deps:
7+- dom-parser-3.0.0
ghc-821.yamlnew file+7
@@ -0,0 +1,7 @@
1+resolver: nightly-2017-09-14
2+
3+packages:
4+- .
5+
6+extra-deps:
7+- dom-parser-3.0.0
src/Data/THGen/Compat.hsnew file+38
@@ -0,0 +1,38 @@
1+{-# LANGUAGE CPP #-}
2+
3+module Data.THGen.Compat
4+ ( dataD
5+ , strictType
6+ , varStrictType
7+ ) where
8+
9+import qualified Language.Haskell.TH as TH
10+
11+dataD :: TH.Name -> [TH.ConQ] -> [TH.Name] -> TH.DecQ
12+#if MIN_VERSION_template_haskell(2,12,0)
13+dataD name cons derivs = TH.dataD (return []) name [] Nothing cons [derivCls]
14+ where
15+ derivCls = TH.derivClause Nothing $ fmap TH.conT derivs
16+#elif MIN_VERSION_template_haskell(2,11,0)
17+dataD name cons derivs = TH.dataD (return []) name [] Nothing cons derivCls
18+ where
19+ derivCls = traverse TH.conT derivs
20+#else
21+dataD name = TH.dataD (return []) name []
22+#endif
23+
24+#if MIN_VERSION_template_haskell(2,11,0)
25+strictType :: TH.TypeQ -> TH.BangTypeQ
26+strictType = TH.bangType (TH.bang TH.noSourceUnpackedness TH.sourceStrict)
27+#else
28+strictType :: TH.TypeQ -> TH.StrictTypeQ
29+strictType = TH.strictType TH.isStrict
30+#endif
31+
32+#if MIN_VERSION_template_haskell(2,11,0)
33+varStrictType :: TH.Name -> TH.BangTypeQ -> TH.VarBangTypeQ
34+varStrictType = TH.varBangType
35+#else
36+varStrictType :: TH.Name -> TH.StrictTypeQ -> TH.VarStrictTypeQ
37+varStrictType = TH.varStrictType
38+#endif
src/Data/THGen/Enum.hs+3−4
@@ -28,6 +28,7 @@ import Control.Applicative
2828import Control.Lens (over, _head, (<&>))
2929import Control.Monad
3030import qualified Data.Char as C
31+import Data.THGen.Compat
3132import qualified Language.Haskell.TH as TH
3233import qualified Test.QuickCheck as QC
3334import qualified Text.Read as R
@@ -74,11 +75,9 @@ enumGenerate (EnumDesc exh strName strVals) = do
7475 unknownConstr = case exh of
7576 Exhaustive -> []
7677 NonExhaustive ->
77− [TH.normalC unknownVal [TH.strictType TH.isStrict [t|String|]]]
78− TH.dataD
79− (return [])
78+ [TH.normalC unknownVal [strictType [t|String|]]]
79+ dataD
8080 name
81− []
8281 (constrs ++ unknownConstr)
8382 ([''Eq, ''Ord] ++ if (exh == Exhaustive) then [''Enum, ''Bounded] else [])
8483 showInstDecl <- do
src/Data/THGen/XML.hs+4−5
@@ -127,6 +127,7 @@ import qualified Data.Char as C
127127import Data.List.NonEmpty (NonEmpty)
128128import Data.Maybe (maybeToList, mapMaybe)
129129import Data.String
130+import Data.THGen.Compat
130131import Data.THGen.Enum
131132import qualified Data.Text as T
132133import qualified Language.Haskell.TH as TH
@@ -329,7 +330,7 @@ isoXmlGenerateRecord (PrefixName strName' strPrefix') descRecordParts = do
329330 XmlFieldPluralRepeated -> [t| [$fieldType] |]
330331 XmlFieldPluralMultiplied -> [t| NonEmpty $fieldType |]
331332 in
332− TH.varStrictType fName (TH.strictType TH.isStrict fType)
333+ varStrictType fName (strictType fType)
333334 IsoXmlDescRecordAttribute descAttribute ->
334335 let
335336 IsoXmlDescAttribute
@@ -339,11 +340,9 @@ isoXmlGenerateRecord (PrefixName strName' strPrefix') descRecordParts = do
339340 XmlAttributePluralMandatory -> attributeType
340341 XmlAttributePluralOptional -> [t| Maybe $attributeType |]
341342 in
342− TH.varStrictType fName (TH.strictType TH.isStrict fType)
343− TH.dataD
344− (return [])
343+ varStrictType fName (strictType fType)
344+ dataD
345345 name
346− []
347346 [TH.recC name fields]
348347 [''Eq, ''Show]
349348 lensDecls <- makeFieldOpticsForDec lensRules dataDecl
stack.yaml+3−5
@@ -1,9 +1,7 @@
1−resolver: lts-6.27
1+resolver: lts-6.35
22
33packages:
4−- "."
4+- .
55
66extra-deps:
7−- dom-parser-2.0.0
8−- type-fun-0.0.1
9−- open-union-0.2.0.0
7+- dom-parser-3.0.0
test/Main.hs+1
@@ -1,3 +1,4 @@
1+{-# OPTIONS -fno-warn-unused-imports #-}
12module Main where
23
34import TestDefs
xml-isogen.cabal+1−1
@@ -21,7 +21,7 @@ library
2121 exposed-modules: Data.THGen.Enum
2222 Data.THGen.XML
2323 Text.XML.ParentAttributes
24−
24+ other-modules: Data.THGen.Compat
2525 build-depends: QuickCheck >= 2.8
2626 , base >=4.8 && <5
2727 , dom-parser >= 2.0.0