diff --git a/ChangeLog.md b/ChangeLog.md
--- a/ChangeLog.md
+++ b/ChangeLog.md
@@ -1,5 +1,9 @@
 # Change Log
 
+* May 5, 2026 (v0.1.0.2): Ported to GHC 9.6.6 / Stackage lts-22.43. Updated
+  dependency bounds for containers, mtl, template-haskell, text, transformers,
+  and deepseq. Added GitHub Actions release workflow.
+
 * April 14, 2018: Moved to hpack's package.yaml format instead of native cabal
   file.
 
diff --git a/README.md b/README.md
--- a/README.md
+++ b/README.md
@@ -27,17 +27,24 @@
 The library can be built with:
 
 ```bash
-stack build # stack version 2.3.3
-stack test :simple
+$ stack build # stack version 2.3.3
+$ stack test :simple
 ```
 
-Or with cabal-3.0.1.0 like:
+Or with cabal (tested on 3.0.0.0) like so:
 
 ```bash
-cabal configure
-cabal install --only-dependencies --enable-tests
-cabal build
-cabal test sexpression
+$ hpack
+$ cabal update
+$ cabal configure
+$ cabal new-build
+$ cabal test sexpression
+...
+Test suite sexpression: RUNNING...
+Test suite sexpression: PASS
+Test suite logged to:
+/antlr-haskell/dist-newstyle/build/x86_64-linux/ghc-8.6.5/antlr-haskell-0.1.0.1/t/sexpression/test/antlr-haskell-0.1.0.1-sexpression.log
+1 of 1 test suites (1 of 1 test cases) passed.
 ```
 
 Here's a good one to run when making changes to the library, and you're unsure
diff --git a/antlr-haskell.cabal b/antlr-haskell.cabal
--- a/antlr-haskell.cabal
+++ b/antlr-haskell.cabal
@@ -1,6 +1,6 @@
 cabal-version:      1.12
 name:               antlr-haskell
-version:            0.1.0.1
+version:            0.1.0.2
 license:            BSD3
 license-file:       LICENSE
 copyright:          MIT
@@ -62,22 +62,23 @@
     default-language:   Haskell2010
     default-extensions:
         DeriveLift DeriveDataTypeable DeriveGeneric DeriveAnyClass
+        StarIsType
 
     other-extensions:
         QuasiQuotes TemplateHaskell ScopedTypeVariables DeriveLift
 
     build-depends:
         base >=4.11 && <5,
-        containers ==0.6.*,
-        deepseq ==1.4.*,
-        hashable >=1.2 && <1.4,
-        haskell-src-meta ==0.8.*,
-        mtl ==2.2.*,
-        template-haskell >=2.14 && <2.16,
-        text ==1.2.*,
+        containers >=0.6 && <0.8,
+        deepseq >=1.4 && <1.6,
+        hashable >=1.2 && <1.5,
+        haskell-src-meta >=0.8 && <0.9,
+        mtl >=2.2 && <2.4,
+        template-haskell >=2.14 && <2.23,
+        text >=1.2 && <2.2,
         th-lift >=0.7.11 && <0.9,
-        transformers ==0.5.*,
-        unordered-containers ==0.2.*
+        transformers >=0.5 && <0.7,
+        unordered-containers >=0.2 && <0.3
 
 test-suite allstar
     type:               exitcode-stdio-1.0
@@ -97,24 +98,24 @@
 
     ghc-options:        -threaded -rtsopts -with-rtsopts=-N
     build-depends:
-        HUnit ==1.6.*,
-        QuickCheck >=2.11 && <2.14,
-        antlr-haskell -any,
+        HUnit >=1.6 && <1.7,
+        QuickCheck >=2.11 && <2.15,
+        antlr-haskell,
         base >=4.11 && <5,
-        call-stack >=0.1 && <0.3,
-        containers ==0.6.*,
-        deepseq ==1.4.*,
-        hashable >=1.2 && <1.4,
-        haskell-src-meta ==0.8.*,
-        mtl ==2.2.*,
-        template-haskell >=2.14 && <2.16,
-        test-framework ==0.8.*,
-        test-framework-hunit ==0.3.*,
-        test-framework-quickcheck2 ==0.3.*,
-        text ==1.2.*,
+        call-stack >=0.1 && <0.5,
+        containers >=0.6 && <0.8,
+        deepseq >=1.4 && <1.6,
+        hashable >=1.2 && <1.5,
+        haskell-src-meta >=0.8 && <0.9,
+        mtl >=2.2 && <2.4,
+        template-haskell >=2.14 && <2.23,
+        test-framework >=0.8 && <0.9,
+        test-framework-hunit >=0.3 && <0.4,
+        test-framework-quickcheck2 >=0.3 && <0.4,
+        text >=1.2 && <2.2,
         th-lift >=0.7.11 && <0.9,
-        transformers ==0.5.*,
-        unordered-containers ==0.2.*
+        transformers >=0.5 && <0.7,
+        unordered-containers >=0.2 && <0.3
 
 test-suite atn
     type:               exitcode-stdio-1.0
@@ -131,24 +132,24 @@
 
     ghc-options:        -threaded -rtsopts -with-rtsopts=-N
     build-depends:
-        HUnit ==1.6.*,
-        QuickCheck >=2.11 && <2.14,
-        antlr-haskell -any,
+        HUnit >=1.6 && <1.7,
+        QuickCheck >=2.11 && <2.15,
+        antlr-haskell,
         base >=4.11 && <5,
-        call-stack >=0.1 && <0.3,
-        containers ==0.6.*,
-        deepseq ==1.4.*,
-        hashable >=1.2 && <1.4,
-        haskell-src-meta ==0.8.*,
-        mtl ==2.2.*,
-        template-haskell >=2.14 && <2.16,
-        test-framework ==0.8.*,
-        test-framework-hunit ==0.3.*,
-        test-framework-quickcheck2 ==0.3.*,
-        text ==1.2.*,
+        call-stack >=0.1 && <0.5,
+        containers >=0.6 && <0.8,
+        deepseq >=1.4 && <1.6,
+        hashable >=1.2 && <1.5,
+        haskell-src-meta >=0.8 && <0.9,
+        mtl >=2.2 && <2.4,
+        template-haskell >=2.14 && <2.23,
+        test-framework >=0.8 && <0.9,
+        test-framework-hunit >=0.3 && <0.4,
+        test-framework-quickcheck2 >=0.3 && <0.4,
+        text >=1.2 && <2.2,
         th-lift >=0.7.11 && <0.9,
-        transformers ==0.5.*,
-        unordered-containers ==0.2.*
+        transformers >=0.5 && <0.7,
+        unordered-containers >=0.2 && <0.3
 
 test-suite c
     type:               exitcode-stdio-1.0
@@ -166,24 +167,24 @@
 
     ghc-options:        -threaded -rtsopts -with-rtsopts=-N
     build-depends:
-        HUnit ==1.6.*,
-        QuickCheck >=2.11 && <2.14,
-        antlr-haskell -any,
+        HUnit >=1.6 && <1.7,
+        QuickCheck >=2.11 && <2.15,
+        antlr-haskell,
         base >=4.11 && <5,
-        call-stack >=0.1 && <0.3,
-        containers ==0.6.*,
-        deepseq ==1.4.*,
-        hashable >=1.2 && <1.4,
-        haskell-src-meta ==0.8.*,
-        mtl ==2.2.*,
-        template-haskell >=2.14 && <2.16,
-        test-framework ==0.8.*,
-        test-framework-hunit ==0.3.*,
-        test-framework-quickcheck2 ==0.3.*,
-        text ==1.2.*,
+        call-stack >=0.1 && <0.5,
+        containers >=0.6 && <0.8,
+        deepseq >=1.4 && <1.6,
+        hashable >=1.2 && <1.5,
+        haskell-src-meta >=0.8 && <0.9,
+        mtl >=2.2 && <2.4,
+        template-haskell >=2.14 && <2.23,
+        test-framework >=0.8 && <0.9,
+        test-framework-hunit >=0.3 && <0.4,
+        test-framework-quickcheck2 >=0.3 && <0.4,
+        text >=1.2 && <2.2,
         th-lift >=0.7.11 && <0.9,
-        transformers ==0.5.*,
-        unordered-containers ==0.2.*
+        transformers >=0.5 && <0.7,
+        unordered-containers >=0.2 && <0.3
 
 test-suite chisel
     type:               exitcode-stdio-1.0
@@ -202,24 +203,24 @@
 
     ghc-options:        -threaded -rtsopts -with-rtsopts=-N
     build-depends:
-        HUnit ==1.6.*,
-        QuickCheck >=2.11 && <2.14,
-        antlr-haskell -any,
+        HUnit >=1.6 && <1.7,
+        QuickCheck >=2.11 && <2.15,
+        antlr-haskell,
         base >=4.11 && <5,
-        call-stack >=0.1 && <0.3,
-        containers ==0.6.*,
-        deepseq ==1.4.*,
-        hashable >=1.2 && <1.4,
-        haskell-src-meta ==0.8.*,
-        mtl ==2.2.*,
-        template-haskell >=2.14 && <2.16,
-        test-framework ==0.8.*,
-        test-framework-hunit ==0.3.*,
-        test-framework-quickcheck2 ==0.3.*,
-        text ==1.2.*,
+        call-stack >=0.1 && <0.5,
+        containers >=0.6 && <0.8,
+        deepseq >=1.4 && <1.6,
+        hashable >=1.2 && <1.5,
+        haskell-src-meta >=0.8 && <0.9,
+        mtl >=2.2 && <2.4,
+        template-haskell >=2.14 && <2.23,
+        test-framework >=0.8 && <0.9,
+        test-framework-hunit >=0.3 && <0.4,
+        test-framework-quickcheck2 >=0.3 && <0.4,
+        text >=1.2 && <2.2,
         th-lift >=0.7.11 && <0.9,
-        transformers ==0.5.*,
-        unordered-containers ==0.2.*
+        transformers >=0.5 && <0.7,
+        unordered-containers >=0.2 && <0.3
 
 test-suite coreg4
     type:               exitcode-stdio-1.0
@@ -240,24 +241,24 @@
 
     ghc-options:        -threaded -rtsopts -with-rtsopts=-N
     build-depends:
-        HUnit ==1.6.*,
-        QuickCheck >=2.11 && <2.14,
-        antlr-haskell -any,
+        HUnit >=1.6 && <1.7,
+        QuickCheck >=2.11 && <2.15,
+        antlr-haskell,
         base >=4.11 && <5,
-        call-stack >=0.1 && <0.3,
-        containers ==0.6.*,
-        deepseq ==1.4.*,
-        hashable >=1.2 && <1.4,
-        haskell-src-meta ==0.8.*,
-        mtl ==2.2.*,
-        template-haskell >=2.14 && <2.16,
-        test-framework ==0.8.*,
-        test-framework-hunit ==0.3.*,
-        test-framework-quickcheck2 ==0.3.*,
-        text ==1.2.*,
+        call-stack >=0.1 && <0.5,
+        containers >=0.6 && <0.8,
+        deepseq >=1.4 && <1.6,
+        hashable >=1.2 && <1.5,
+        haskell-src-meta >=0.8 && <0.9,
+        mtl >=2.2 && <2.4,
+        template-haskell >=2.14 && <2.23,
+        test-framework >=0.8 && <0.9,
+        test-framework-hunit >=0.3 && <0.4,
+        test-framework-quickcheck2 >=0.3 && <0.4,
+        text >=1.2 && <2.2,
         th-lift >=0.7.11 && <0.9,
-        transformers ==0.5.*,
-        unordered-containers ==0.2.*
+        transformers >=0.5 && <0.7,
+        unordered-containers >=0.2 && <0.3
 
 test-suite g4
     type:               exitcode-stdio-1.0
@@ -280,24 +281,24 @@
 
     ghc-options:        -threaded -rtsopts -with-rtsopts=-N
     build-depends:
-        HUnit ==1.6.*,
-        QuickCheck >=2.11 && <2.14,
-        antlr-haskell -any,
+        HUnit >=1.6 && <1.7,
+        QuickCheck >=2.11 && <2.15,
+        antlr-haskell,
         base >=4.11 && <5,
-        call-stack >=0.1 && <0.3,
-        containers ==0.6.*,
-        deepseq ==1.4.*,
-        hashable >=1.2 && <1.4,
-        haskell-src-meta ==0.8.*,
-        mtl ==2.2.*,
-        template-haskell >=2.14 && <2.16,
-        test-framework ==0.8.*,
-        test-framework-hunit ==0.3.*,
-        test-framework-quickcheck2 ==0.3.*,
-        text ==1.2.*,
+        call-stack >=0.1 && <0.5,
+        containers >=0.6 && <0.8,
+        deepseq >=1.4 && <1.6,
+        hashable >=1.2 && <1.5,
+        haskell-src-meta >=0.8 && <0.9,
+        mtl >=2.2 && <2.4,
+        template-haskell >=2.14 && <2.23,
+        test-framework >=0.8 && <0.9,
+        test-framework-hunit >=0.3 && <0.4,
+        test-framework-quickcheck2 >=0.3 && <0.4,
+        text >=1.2 && <2.2,
         th-lift >=0.7.11 && <0.9,
-        transformers ==0.5.*,
-        unordered-containers ==0.2.*
+        transformers >=0.5 && <0.7,
+        unordered-containers >=0.2 && <0.3
 
 test-suite lexer
     type:               exitcode-stdio-1.0
@@ -313,24 +314,24 @@
 
     ghc-options:        -threaded -rtsopts -with-rtsopts=-N
     build-depends:
-        HUnit ==1.6.*,
-        QuickCheck >=2.11 && <2.14,
-        antlr-haskell -any,
+        HUnit >=1.6 && <1.7,
+        QuickCheck >=2.11 && <2.15,
+        antlr-haskell,
         base >=4.11 && <5,
-        call-stack >=0.1 && <0.3,
-        containers ==0.6.*,
-        deepseq ==1.4.*,
-        hashable >=1.2 && <1.4,
-        haskell-src-meta ==0.8.*,
-        mtl ==2.2.*,
-        template-haskell >=2.14 && <2.16,
-        test-framework ==0.8.*,
-        test-framework-hunit ==0.3.*,
-        test-framework-quickcheck2 ==0.3.*,
-        text ==1.2.*,
+        call-stack >=0.1 && <0.5,
+        containers >=0.6 && <0.8,
+        deepseq >=1.4 && <1.6,
+        hashable >=1.2 && <1.5,
+        haskell-src-meta >=0.8 && <0.9,
+        mtl >=2.2 && <2.4,
+        template-haskell >=2.14 && <2.23,
+        test-framework >=0.8 && <0.9,
+        test-framework-hunit >=0.3 && <0.4,
+        test-framework-quickcheck2 >=0.3 && <0.4,
+        text >=1.2 && <2.2,
         th-lift >=0.7.11 && <0.9,
-        transformers ==0.5.*,
-        unordered-containers ==0.2.*
+        transformers >=0.5 && <0.7,
+        unordered-containers >=0.2 && <0.3
 
 test-suite ll
     type:               exitcode-stdio-1.0
@@ -347,24 +348,24 @@
 
     ghc-options:        -threaded -rtsopts -with-rtsopts=-N
     build-depends:
-        HUnit ==1.6.*,
-        QuickCheck >=2.11 && <2.14,
-        antlr-haskell -any,
+        HUnit >=1.6 && <1.7,
+        QuickCheck >=2.11 && <2.15,
+        antlr-haskell,
         base >=4.11 && <5,
-        call-stack >=0.1 && <0.3,
-        containers ==0.6.*,
-        deepseq ==1.4.*,
-        hashable >=1.2 && <1.4,
-        haskell-src-meta ==0.8.*,
-        mtl ==2.2.*,
-        template-haskell >=2.14 && <2.16,
-        test-framework ==0.8.*,
-        test-framework-hunit ==0.3.*,
-        test-framework-quickcheck2 ==0.3.*,
-        text ==1.2.*,
+        call-stack >=0.1 && <0.5,
+        containers >=0.6 && <0.8,
+        deepseq >=1.4 && <1.6,
+        hashable >=1.2 && <1.5,
+        haskell-src-meta >=0.8 && <0.9,
+        mtl >=2.2 && <2.4,
+        template-haskell >=2.14 && <2.23,
+        test-framework >=0.8 && <0.9,
+        test-framework-hunit >=0.3 && <0.4,
+        test-framework-quickcheck2 >=0.3 && <0.4,
+        text >=1.2 && <2.2,
         th-lift >=0.7.11 && <0.9,
-        transformers ==0.5.*,
-        unordered-containers ==0.2.*
+        transformers >=0.5 && <0.7,
+        unordered-containers >=0.2 && <0.3
 
 test-suite lr
     type:               exitcode-stdio-1.0
@@ -387,24 +388,24 @@
 
     ghc-options:        -threaded -rtsopts -with-rtsopts=-N
     build-depends:
-        HUnit ==1.6.*,
-        QuickCheck >=2.11 && <2.14,
-        antlr-haskell -any,
+        HUnit >=1.6 && <1.7,
+        QuickCheck >=2.11 && <2.15,
+        antlr-haskell,
         base >=4.11 && <5,
-        call-stack >=0.1 && <0.3,
-        containers ==0.6.*,
-        deepseq ==1.4.*,
-        hashable >=1.2 && <1.4,
-        haskell-src-meta ==0.8.*,
-        mtl ==2.2.*,
-        template-haskell >=2.14 && <2.16,
-        test-framework ==0.8.*,
-        test-framework-hunit ==0.3.*,
-        test-framework-quickcheck2 ==0.3.*,
-        text ==1.2.*,
+        call-stack >=0.1 && <0.5,
+        containers >=0.6 && <0.8,
+        deepseq >=1.4 && <1.6,
+        hashable >=1.2 && <1.5,
+        haskell-src-meta >=0.8 && <0.9,
+        mtl >=2.2 && <2.4,
+        template-haskell >=2.14 && <2.23,
+        test-framework >=0.8 && <0.9,
+        test-framework-hunit >=0.3 && <0.4,
+        test-framework-quickcheck2 >=0.3 && <0.4,
+        text >=1.2 && <2.2,
         th-lift >=0.7.11 && <0.9,
-        transformers ==0.5.*,
-        unordered-containers ==0.2.*
+        transformers >=0.5 && <0.7,
+        unordered-containers >=0.2 && <0.3
 
 test-suite sexpression
     type:               exitcode-stdio-1.0
@@ -421,18 +422,18 @@
 
     ghc-options:        -threaded -rtsopts -with-rtsopts=-N
     build-depends:
-        antlr-haskell -any,
+        antlr-haskell,
         base >=4.11 && <5,
-        containers ==0.6.*,
-        deepseq ==1.4.*,
-        hashable >=1.2 && <1.4,
-        haskell-src-meta ==0.8.*,
-        mtl ==2.2.*,
-        template-haskell >=2.14 && <2.16,
-        text ==1.2.*,
+        containers >=0.6 && <0.8,
+        deepseq >=1.4 && <1.6,
+        hashable >=1.2 && <1.5,
+        haskell-src-meta >=0.8 && <0.9,
+        mtl >=2.2 && <2.4,
+        template-haskell >=2.14 && <2.23,
+        text >=1.2 && <2.2,
         th-lift >=0.7.11 && <0.9,
-        transformers ==0.5.*,
-        unordered-containers ==0.2.*
+        transformers >=0.5 && <0.7,
+        unordered-containers >=0.2 && <0.3
 
 test-suite simple
     type:               exitcode-stdio-1.0
@@ -448,24 +449,24 @@
 
     ghc-options:        -threaded -rtsopts -with-rtsopts=-N
     build-depends:
-        HUnit ==1.6.*,
-        QuickCheck >=2.11 && <2.14,
-        antlr-haskell -any,
+        HUnit >=1.6 && <1.7,
+        QuickCheck >=2.11 && <2.15,
+        antlr-haskell,
         base >=4.11 && <5,
-        call-stack >=0.1 && <0.3,
-        containers ==0.6.*,
-        deepseq ==1.4.*,
-        hashable >=1.2 && <1.4,
-        haskell-src-meta ==0.8.*,
-        mtl ==2.2.*,
-        template-haskell >=2.14 && <2.16,
-        test-framework ==0.8.*,
-        test-framework-hunit ==0.3.*,
-        test-framework-quickcheck2 ==0.3.*,
-        text ==1.2.*,
+        call-stack >=0.1 && <0.5,
+        containers >=0.6 && <0.8,
+        deepseq >=1.4 && <1.6,
+        hashable >=1.2 && <1.5,
+        haskell-src-meta >=0.8 && <0.9,
+        mtl >=2.2 && <2.4,
+        template-haskell >=2.14 && <2.23,
+        test-framework >=0.8 && <0.9,
+        test-framework-hunit >=0.3 && <0.4,
+        test-framework-quickcheck2 >=0.3 && <0.4,
+        text >=1.2 && <2.2,
         th-lift >=0.7.11 && <0.9,
-        transformers ==0.5.*,
-        unordered-containers ==0.2.*
+        transformers >=0.5 && <0.7,
+        unordered-containers >=0.2 && <0.3
 
 test-suite swift
     type:               exitcode-stdio-1.0
@@ -482,18 +483,18 @@
 
     ghc-options:        -threaded -rtsopts -with-rtsopts=-N
     build-depends:
-        antlr-haskell -any,
+        antlr-haskell,
         base >=4.11 && <5,
-        containers ==0.6.*,
-        deepseq ==1.4.*,
-        hashable >=1.2 && <1.4,
-        haskell-src-meta ==0.8.*,
-        mtl ==2.2.*,
-        template-haskell >=2.14 && <2.16,
-        text ==1.2.*,
+        containers >=0.6 && <0.8,
+        deepseq >=1.4 && <1.6,
+        hashable >=1.2 && <1.5,
+        haskell-src-meta >=0.8 && <0.9,
+        mtl >=2.2 && <2.4,
+        template-haskell >=2.14 && <2.23,
+        text >=1.2 && <2.2,
         th-lift >=0.7.11 && <0.9,
-        transformers ==0.5.*,
-        unordered-containers ==0.2.*
+        transformers >=0.5 && <0.7,
+        unordered-containers >=0.2 && <0.3
 
 test-suite template
     type:               exitcode-stdio-1.0
@@ -509,24 +510,24 @@
 
     ghc-options:        -threaded -rtsopts -with-rtsopts=-N
     build-depends:
-        HUnit ==1.6.*,
-        QuickCheck >=2.11 && <2.14,
-        antlr-haskell -any,
+        HUnit >=1.6 && <1.7,
+        QuickCheck >=2.11 && <2.15,
+        antlr-haskell,
         base >=4.11 && <5,
-        call-stack >=0.1 && <0.3,
-        containers ==0.6.*,
-        deepseq ==1.4.*,
-        hashable >=1.2 && <1.4,
-        haskell-src-meta ==0.8.*,
-        mtl ==2.2.*,
-        template-haskell >=2.14 && <2.16,
-        test-framework ==0.8.*,
-        test-framework-hunit ==0.3.*,
-        test-framework-quickcheck2 ==0.3.*,
-        text ==1.2.*,
+        call-stack >=0.1 && <0.5,
+        containers >=0.6 && <0.8,
+        deepseq >=1.4 && <1.6,
+        hashable >=1.2 && <1.5,
+        haskell-src-meta >=0.8 && <0.9,
+        mtl >=2.2 && <2.4,
+        template-haskell >=2.14 && <2.23,
+        test-framework >=0.8 && <0.9,
+        test-framework-hunit >=0.3 && <0.4,
+        test-framework-quickcheck2 >=0.3 && <0.4,
+        text >=1.2 && <2.2,
         th-lift >=0.7.11 && <0.9,
-        transformers ==0.5.*,
-        unordered-containers ==0.2.*
+        transformers >=0.5 && <0.7,
+        unordered-containers >=0.2 && <0.3
 
 test-suite unit
     type:               exitcode-stdio-1.0
@@ -542,24 +543,24 @@
 
     ghc-options:        -threaded -rtsopts -with-rtsopts=-N
     build-depends:
-        HUnit ==1.6.*,
-        QuickCheck >=2.11 && <2.14,
-        antlr-haskell -any,
+        HUnit >=1.6 && <1.7,
+        QuickCheck >=2.11 && <2.15,
+        antlr-haskell,
         base >=4.11 && <5,
-        call-stack >=0.1 && <0.3,
-        containers ==0.6.*,
-        deepseq ==1.4.*,
-        hashable >=1.2 && <1.4,
-        haskell-src-meta ==0.8.*,
-        mtl ==2.2.*,
-        template-haskell >=2.14 && <2.16,
-        test-framework ==0.8.*,
-        test-framework-hunit ==0.3.*,
-        test-framework-quickcheck2 ==0.3.*,
-        text ==1.2.*,
+        call-stack >=0.1 && <0.5,
+        containers >=0.6 && <0.8,
+        deepseq >=1.4 && <1.6,
+        hashable >=1.2 && <1.5,
+        haskell-src-meta >=0.8 && <0.9,
+        mtl >=2.2 && <2.4,
+        template-haskell >=2.14 && <2.23,
+        test-framework >=0.8 && <0.9,
+        test-framework-hunit >=0.3 && <0.4,
+        test-framework-quickcheck2 >=0.3 && <0.4,
+        text >=1.2 && <2.2,
         th-lift >=0.7.11 && <0.9,
-        transformers ==0.5.*,
-        unordered-containers ==0.2.*
+        transformers >=0.5 && <0.7,
+        unordered-containers >=0.2 && <0.3
 
 test-suite unit0
     type:               exitcode-stdio-1.0
@@ -580,21 +581,21 @@
 
     ghc-options:        -threaded -rtsopts -with-rtsopts=-N
     build-depends:
-        HUnit ==1.6.*,
-        QuickCheck >=2.11 && <2.14,
-        antlr-haskell -any,
+        HUnit >=1.6 && <1.7,
+        QuickCheck >=2.11 && <2.15,
+        antlr-haskell,
         base >=4.11 && <5,
-        call-stack >=0.1 && <0.3,
-        containers ==0.6.*,
-        deepseq ==1.4.*,
-        hashable >=1.2 && <1.4,
-        haskell-src-meta ==0.8.*,
-        mtl ==2.2.*,
-        template-haskell >=2.14 && <2.16,
-        test-framework ==0.8.*,
-        test-framework-hunit ==0.3.*,
-        test-framework-quickcheck2 ==0.3.*,
-        text ==1.2.*,
+        call-stack >=0.1 && <0.5,
+        containers >=0.6 && <0.8,
+        deepseq >=1.4 && <1.6,
+        hashable >=1.2 && <1.5,
+        haskell-src-meta >=0.8 && <0.9,
+        mtl >=2.2 && <2.4,
+        template-haskell >=2.14 && <2.23,
+        test-framework >=0.8 && <0.9,
+        test-framework-hunit >=0.3 && <0.4,
+        test-framework-quickcheck2 >=0.3 && <0.4,
+        text >=1.2 && <2.2,
         th-lift >=0.7.11 && <0.9,
-        transformers ==0.5.*,
-        unordered-containers ==0.2.*
+        transformers >=0.5 && <0.7,
+        unordered-containers >=0.2 && <0.3
diff --git a/src/Data/Set/Monad.hs b/src/Data/Set/Monad.hs
--- a/src/Data/Set/Monad.hs
+++ b/src/Data/Set/Monad.hs
@@ -212,7 +212,6 @@
 
 instance (Ord a) => Monoid (Set a) where
   mempty  = empty
-  mappend = union
   mconcat = unions
 
 instance Foldable Set where
diff --git a/src/Language/ANTLR4/Boot/Quote.hs b/src/Language/ANTLR4/Boot/Quote.hs
--- a/src/Language/ANTLR4/Boot/Quote.hs
+++ b/src/Language/ANTLR4/Boot/Quote.hs
@@ -292,8 +292,10 @@
     Nothing -> s
     Just i  -> show i)
 
+defBang :: Q Bang
 defBang = bang noSourceUnpackedness noSourceStrictness
 
+strBangType :: (Q Bang, Q Type)
 strBangType = (defBang, conT $ mkName "String")
 
 mkCon   = conE . mkName . mkUpper
@@ -612,8 +614,9 @@
             ]
 
   retType = let
+    rT :: G4S.PRHS -> Q Type
     rT G4S.PRHS{G4S.alphas = as, G4S.pDirective = dir}
-      = case (dir, vars as) of
+      = case (dir, (vars as :: [(G4S.ProdElem, Name, Q Exp)])) of
           (Just (G4S.UpperD d), vs) ->
               (do  i <- reify $ mkName d
                    (case i of
@@ -1102,8 +1105,8 @@
     lr1Table' = M.toList tblInt -- _lr1Table'
     lr1S0'    = LR.convStateInt is $ LR.lr1Closure g $ LR.lr1S0 g
 
-    unitTy = [t| () |]
-    name' = [e| $(varE name) |] -- :: $(justGrammarTy' ast unitTy) |]
+    unitTy = [t| () |] :: Q Type
+    name' = [e| $(varE name) |] :: Q Exp -- :: $(justGrammarTy' ast unitTy) |]
   in do --D.traceM $ pshow' is
         D.traceM $ "lr1S0 = " ++ (pshow' $ LR.lr1S0 g)
         --D.traceM $ "lr1Table = " ++ (pshow' $ LR.lr1Table g)
diff --git a/src/Text/ANTLR/LL1.hs b/src/Text/ANTLR/LL1.hs
--- a/src/Text/ANTLR/LL1.hs
+++ b/src/Text/ANTLR/LL1.hs
@@ -419,16 +419,13 @@
       | otherwise = []
 
     lcps :: [(Prime nts, ProdElems (Prime nts) t)]
-    lcps = [ (nts0, maximumBy (comparing length)
-                   [ lcp xs ys
-                   | Production _ (Prod _ xs) _ <- filter ((== nts0) . getLHS) (ps g)
-                   , Production _ (Prod _ ys) _ <- filter ((== nts0) . getLHS) (ps g)
-                   , xs /= ys
-                   ])
-           | nts0 <- toList $ ns g ]
-
-    --longest_lcps :: [(nts, ProdElems nts t)]
-    --longest_lcps = filter (not . null . snd) lcps
+    lcps = [ (nts0, maximumBy (comparing length) lcp_list)
+           | nts0 <- toList $ ns g
+           , let lcp_list = [ lcp xs ys
+                             | Production _ (Prod _ xs) _ <- filter ((== nts0) . getLHS) (ps g)
+                             , Production _ (Prod _ ys) _ <- filter ((== nts0) . getLHS) (ps g)
+                             , xs /= ys ]
+           , not (null lcp_list) ]
 
     incr :: Prime nts -> Prime nts
     incr (Prime (nts, i)) = Prime (nts, i + 1)
diff --git a/src/Text/ANTLR/MultiMap.hs b/src/Text/ANTLR/MultiMap.hs
--- a/src/Text/ANTLR/MultiMap.hs
+++ b/src/Text/ANTLR/MultiMap.hs
@@ -21,8 +21,6 @@
 import Data.Data (Data(..))
 import Language.Haskell.TH.Syntax (Lift(..))
 
-instance (Lift k, Lift v, Data k, Data v, Ord k, Ord v) => Lift (M.Map k v)
-
 -- | A multi 'Map' is a mapping from keys @k@ to sets of values @v@. A nice
 --   invariant to maintain while using a multi-map is to never have empty
 --   sets mapped to by some key.
diff --git a/src/Text/ANTLR/Set.hs b/src/Text/ANTLR/Set.hs
--- a/src/Text/ANTLR/Set.hs
+++ b/src/Text/ANTLR/Set.hs
@@ -27,12 +27,12 @@
 import qualified Control.Applicative  as A
 import qualified Data.Foldable        as Foldable
 
-import Data.Map ( Map(..) )
+import Data.Map ( Map )
 import qualified Data.Map as M
 
 import qualified Data.HashSet as S
 import Data.HashSet as S
-  ( HashSet(..), member, toList, union
+  ( HashSet, member, toList, union
   , null, empty, map, size, singleton, insert
   , delete, unions, difference, intersection, foldl'
   , fromList
@@ -69,11 +69,8 @@
 (\\) :: (Hashable a, Eq a) => Set a -> Set a -> Set a
 m1 \\ m2 = difference m1 m2
 
-instance (Hashable a, Eq a, Lift a) => Lift (S.HashSet a) where
-  lift set = [| fromList $(lift $ toList set) |]
-
-instance (Hashable k, Hashable v) => Hashable (Map k v) where
-  hashWithSalt salt mp = salt `hashWithSalt` M.toList mp
+-- Lift (HashSet a) provided by unordered-containers >= 0.2.20
+-- Hashable (Map k v) provided by hashable >= 1.3.4
 
 instance (Prettify a, Hashable a, Eq a) => Prettify (S.HashSet a) where
   prettify s = do
