From 6b56c873dce369bc689d35b98074be5e6008a903 Mon Sep 17 00:00:00 2001 From: John Ky Date: Tue, 27 Mar 2018 16:51:19 +1100 Subject: [PATCH] Add deepseq support to XmlCursor. Use hpack. --- .gitignore | 1 + circle.yml | 6 +- hw-xml.cabal | 136 ------------------ package.yaml | 133 +++++++++++++++++ .../Data/Xml/Succinct/Cursor/Internal.hs | 8 +- stack.yaml | 14 +- 6 files changed, 146 insertions(+), 152 deletions(-) delete mode 100644 hw-xml.cabal create mode 100644 package.yaml diff --git a/.gitignore b/.gitignore index 1cf18bc..eeedcbf 100644 --- a/.gitignore +++ b/.gitignore @@ -14,6 +14,7 @@ cabal.sandbox.config *.prof *.aux *.hp +*.cabal /*.submodules /.stack-work/ diff --git a/circle.yml b/circle.yml index ac63de5..a022c78 100644 --- a/circle.yml +++ b/circle.yml @@ -3,7 +3,7 @@ jobs: build: working_directory: ~/hw-xml docker: - - image: fpco/stack-build:latest + - image: quay.io/haskell_works/stack-build-cabal steps: - checkout @@ -49,7 +49,7 @@ jobs: ##### Building library - restore_cache: keys: - - dot-stack-{{ checksum "stack.yaml" }}-{{ checksum "hw-xml.cabal" }} + - dot-stack-{{ checksum "stack.yaml" }}-{{ checksum "package.yaml" }} - dot-stack-{{ checksum "stack.yaml" }}-build - dot-stack-{{ checksum "stack.yaml" }}-setup @@ -74,7 +74,7 @@ jobs: command: stack --stack-yaml stack-ci.yaml build --test --no-run-tests - save_cache: - key: dot-stack-{{ checksum "stack.yaml" }}-{{ checksum "hw-xml.cabal" }} + key: dot-stack-{{ checksum "stack.yaml" }}-{{ checksum "package.yaml" }} paths: - ~/.stack - save_cache: diff --git a/hw-xml.cabal b/hw-xml.cabal deleted file mode 100644 index 804b17f..0000000 --- a/hw-xml.cabal +++ /dev/null @@ -1,136 +0,0 @@ -name: hw-xml -version: 0.1.0.1 -synopsis: Conduits for tokenizing streams. -description: Please see README.md -homepage: http://github.com/haskell-works/hw-xml#readme -license: BSD3 -license-file: LICENSE -author: John Ky, Alexey Raga -maintainer: alexey.raga@gmail.com -copyright: 2016 John Ky, Alexey Raga -category: Data, XML -build-type: Simple -extra-source-files: README.md -cabal-version: >= 1.22 -data-files: data/catalog.xml - -executable hw-xml-example - hs-source-dirs: app - main-is: Main.hs - ghc-options: -threaded -rtsopts -with-rtsopts=-N -O2 -Wall -msse4.2 - build-depends: base >= 4 && < 5 - , bytestring - , hw-balancedparens >= 0.2.0.1 - , hw-bits >= 0.7.0.2 - , hw-prim >= 0.5.0.0 - , hw-rankselect >= 0.10.0.3 - , hw-xml - , vector - default-language: Haskell2010 - -library - hs-source-dirs: src - exposed-modules: HaskellWorks.Data.Xml - , HaskellWorks.Data.Xml.Blank - , HaskellWorks.Data.Xml.CharLike - , HaskellWorks.Data.Xml.Conduit - , HaskellWorks.Data.Xml.Conduit.Blank - , HaskellWorks.Data.Xml.Conduit.Words - , HaskellWorks.Data.Xml.Decode - , HaskellWorks.Data.Xml.DecodeError - , HaskellWorks.Data.Xml.DecodeResult - , HaskellWorks.Data.Xml.Grammar - , HaskellWorks.Data.Xml.Index - , HaskellWorks.Data.Xml.Lens - , HaskellWorks.Data.Xml.Succinct - , HaskellWorks.Data.Xml.Succinct.Cursor - , HaskellWorks.Data.Xml.Succinct.Cursor.BalancedParens - , HaskellWorks.Data.Xml.Succinct.Cursor.BlankedXml - , HaskellWorks.Data.Xml.Succinct.Cursor.InterestBits - , HaskellWorks.Data.Xml.Succinct.Cursor.Internal - , HaskellWorks.Data.Xml.Succinct.Cursor.Token - , HaskellWorks.Data.Xml.Succinct.Index - , HaskellWorks.Data.Xml.RawDecode - , HaskellWorks.Data.Xml.RawValue - , HaskellWorks.Data.Xml.Token.Tokenize - , HaskellWorks.Data.Xml.Token.Types - , HaskellWorks.Data.Xml.Token - , HaskellWorks.Data.Xml.Type - , HaskellWorks.Data.Xml.Value - build-depends: base >= 4 && < 5 - , array - , ansi-wl-pprint - , attoparsec - , bytestring - , cereal - , conduit - , containers - , ghc-prim - , hw-balancedparens >= 0.1.0.0 - , hw-bits >= 0.4.0.0 - , hw-conduit >= 0.2.0.2 - , hw-parser - , hw-prim >= 0.4.0.0 - , hw-rankselect >= 0.7.0.0 - , hw-rankselect-base >= 0.2.0.0 - , lens - , mtl - , resourcet - , transformers - , vector - , word8 - - default-language: Haskell2010 - ghc-options: -Wall -O2 -msse4.2 - -test-suite hw-xml-test - type: exitcode-stdio-1.0 - hs-source-dirs: test - main-is: Spec.hs - other-modules: HaskellWorks.Data.Xml.Conduit.BlankSpec - , HaskellWorks.Data.Xml.RawValueSpec - , HaskellWorks.Data.Xml.Succinct.Cursor.BalancedParensSpec - , HaskellWorks.Data.Xml.Succinct.Cursor.InterestBitsSpec - , HaskellWorks.Data.Xml.Succinct.CursorSpec - , HaskellWorks.Data.Xml.Token.TokenizeSpec - , HaskellWorks.Data.Xml.TypeSpec - build-depends: base >= 4 && < 5 - , attoparsec - , bytestring - , conduit - , hspec - , hw-balancedparens >= 0.1.0.0 - , hw-bits >= 0.4.0.0 - , hw-conduit >= 0.2.0.2 - , hw-xml - , hw-prim >= 0.4.0.0 - , hw-rankselect >= 0.7.0.0 - , hw-rankselect-base >= 0.2.0.0 - , QuickCheck - , vector - ghc-options: -threaded -rtsopts -with-rtsopts=-N - -- -Wall - default-language: Haskell2010 - -source-repository head - type: git - location: https://github.com/haskell-works/hw-xml - -benchmark bench - Type: exitcode-stdio-1.0 - HS-Source-Dirs: bench - Main-Is: Main.hs - GHC-Options: -O2 -Wall -msse4.2 - Default-Language: Haskell2010 - Build-Depends: base >= 4 && < 5 - , bytestring - , conduit - , criterion - , hw-balancedparens >= 0.1.0.0 - , hw-bits >= 0.4.0.0 - , hw-conduit >= 0.2.0.2 - , hw-xml - , hw-prim >= 0.4.0.0 - , mmap - , resourcet - , vector diff --git a/package.yaml b/package.yaml new file mode 100644 index 0000000..3e76e62 --- /dev/null +++ b/package.yaml @@ -0,0 +1,133 @@ +name: hw-xml +version: '0.1.0.1' +synopsis: Conduits for tokenizing streams. +description: Please see README.md +category: Data, XML +author: +- John Ky +- Alexey Raga +maintainer: alexey.raga@gmail.com +copyright: +- 2016 John Ky +- Alexey Raga +license: BSD3 +github: haskell-works/hw-xml +homepage: http://github.com/haskell-works/hw-xml#readme +extra-source-files: +- README.md +dependencies: +- base >=4 && <5 +- bytestring +- vector +library: + source-dirs: src + ghc-options: + - -Wall + - -O2 + - -msse4.2 + exposed-modules: + - HaskellWorks.Data.Xml + - HaskellWorks.Data.Xml.Blank + - HaskellWorks.Data.Xml.CharLike + - HaskellWorks.Data.Xml.Conduit + - HaskellWorks.Data.Xml.Conduit.Blank + - HaskellWorks.Data.Xml.Conduit.Words + - HaskellWorks.Data.Xml.Decode + - HaskellWorks.Data.Xml.DecodeError + - HaskellWorks.Data.Xml.DecodeResult + - HaskellWorks.Data.Xml.Grammar + - HaskellWorks.Data.Xml.Index + - HaskellWorks.Data.Xml.Lens + - HaskellWorks.Data.Xml.Succinct + - HaskellWorks.Data.Xml.Succinct.Cursor + - HaskellWorks.Data.Xml.Succinct.Cursor.BalancedParens + - HaskellWorks.Data.Xml.Succinct.Cursor.BlankedXml + - HaskellWorks.Data.Xml.Succinct.Cursor.InterestBits + - HaskellWorks.Data.Xml.Succinct.Cursor.Internal + - HaskellWorks.Data.Xml.Succinct.Cursor.Token + - HaskellWorks.Data.Xml.Succinct.Index + - HaskellWorks.Data.Xml.RawDecode + - HaskellWorks.Data.Xml.RawValue + - HaskellWorks.Data.Xml.Token.Tokenize + - HaskellWorks.Data.Xml.Token.Types + - HaskellWorks.Data.Xml.Token + - HaskellWorks.Data.Xml.Type + - HaskellWorks.Data.Xml.Value + dependencies: + - array + - ansi-wl-pprint + - attoparsec + - cereal + - conduit + - containers + - deepseq + - ghc-prim + - hw-balancedparens >=0.1.0.0 + - hw-bits >=0.4.0.0 + - hw-conduit >=0.2.0.2 + - hw-parser + - hw-prim >=0.4.0.0 + - hw-rankselect >=0.7.0.0 + - hw-rankselect-base >=0.2.0.0 + - lens + - mtl + - resourcet + - transformers + - word8 +executables: + hw-xml-example: + main: Main.hs + source-dirs: app + ghc-options: + - -threaded + - -rtsopts + - -with-rtsopts=-N + - -O2 + - -Wall + - -msse4.2 + dependencies: + - hw-balancedparens >=0.2.0.1 + - hw-bits >=0.7.0.2 + - hw-prim >=0.5.0.0 + - hw-rankselect >=0.10.0.3 + - hw-xml +tests: + hw-xml-test: + main: Spec.hs + source-dirs: test + ghc-options: + - -threaded + - -rtsopts + - -with-rtsopts=-N + dependencies: + - attoparsec + - conduit + - hspec + - hw-balancedparens >=0.1.0.0 + - hw-bits >=0.4.0.0 + - hw-conduit >=0.2.0.2 + - hw-xml + - hw-prim >=0.4.0.0 + - hw-rankselect >=0.7.0.0 + - hw-rankselect-base >=0.2.0.0 + - QuickCheck +benchmarks: + bench: + main: Main.hs + source-dirs: bench + ghc-options: + - -O2 + - -Wall + - -msse4.2 + dependencies: + - conduit + - criterion + - hw-balancedparens >=0.1.0.0 + - hw-bits >=0.4.0.0 + - hw-conduit >=0.2.0.2 + - hw-xml + - hw-prim >=0.4.0.0 + - mmap + - resourcet +data-files: +- data/catalog.xml diff --git a/src/HaskellWorks/Data/Xml/Succinct/Cursor/Internal.hs b/src/HaskellWorks/Data/Xml/Succinct/Cursor/Internal.hs index 99a2a4d..058c175 100644 --- a/src/HaskellWorks/Data/Xml/Succinct/Cursor/Internal.hs +++ b/src/HaskellWorks/Data/Xml/Succinct/Cursor/Internal.hs @@ -1,3 +1,6 @@ +{-# LANGUAGE DeriveAnyClass #-} +{-# LANGUAGE DeriveGeneric #-} +{-# LANGUAGE DerivingStrategies #-} {-# LANGUAGE FlexibleContexts #-} {-# LANGUAGE FlexibleInstances #-} {-# LANGUAGE InstanceSigs #-} @@ -9,10 +12,12 @@ module HaskellWorks.Data.Xml.Succinct.Cursor.Internal , xmlCursorPos ) where +import Control.DeepSeq (NFData) import Data.ByteString.Internal as BSI import Data.String import Data.Word import Foreign.ForeignPtr +import GHC.Generics import HaskellWorks.Data.Bits.BitShown import HaskellWorks.Data.FromByteString import HaskellWorks.Data.FromForeignRegion @@ -37,7 +42,8 @@ data XmlCursor t v w = XmlCursor , balancedParens :: !w , cursorRank :: !Count } - deriving (Eq, Show) + deriving (Eq, Show, Generic) + deriving anyclass NFData instance (FromBlankedXml (XmlInterestBits a), FromBlankedXml (CBP.XmlBalancedParens b)) => FromByteString (XmlCursor BS.ByteString a b) where diff --git a/stack.yaml b/stack.yaml index e4b9006..2d7a6da 100644 --- a/stack.yaml +++ b/stack.yaml @@ -1,20 +1,10 @@ -resolver: lts-9.1 +resolver: lts-10.9 packages: - '.' extra-deps: - - hedgehog-0.5 - - hw-balancedparens-0.2.0.1 - - hw-bits-0.7.0.2 - - hw-conduit-0.2.0.2 - - hw-excess-0.2.0.0 - - hw-int-0.0.0.3 - - hw-parser-0.0.0.3 - - hw-prim-0.5.0.0 - - hw-rankselect-0.10.0.3 - - hw-rankselect-base-0.2.0.2 - - hw-string-parse-0.0.0.4 + - hedgehog-0.5.3 flags: {}