diff --git a/ChangeLog.md b/ChangeLog.md
--- a/ChangeLog.md
+++ b/ChangeLog.md
@@ -2,6 +2,10 @@
 
 ## Unreleased changes
 
+## [0.1.1.8] - 2023-03-23
+### Changed
+- Speedup alignment of `Chain Int Char`.
+
 ## [0.1.1.7] - 2021-10-06
 ### Added
 - `Complementary` instance for `Char`.
diff --git a/cobot.cabal b/cobot.cabal
--- a/cobot.cabal
+++ b/cobot.cabal
@@ -1,13 +1,13 @@
 cabal-version: 2.2
 
--- This file has been generated from package.yaml by hpack version 0.34.4.
+-- This file has been generated from package.yaml by hpack version 0.35.0.
 --
 -- see: https://github.com/sol/hpack
 --
--- hash: 09eef6fbd0d4093057c44a56242d5c569842b42a1e49c3625efc6d01f1471d9f
+-- hash: 8dc601d166ae8a9d13853f48df9e28fb2c547e46d0d582a6eb091deab3d7a7ba
 
 name:           cobot
-version:        0.1.1.7
+version:        0.1.1.8
 synopsis:       Computational biology toolkit to collaborate with researchers in constructive protein engineering
 description:    Please see the README on GitHub at <https://github.com/biocad/cobot#readme>
 category:       Bio
@@ -19,6 +19,8 @@
 license:        BSD-3-Clause
 license-file:   LICENSE
 build-type:     Simple
+tested-with:
+    GHC ==8.10.7 || ==9.2.5 || ==9.4.4
 extra-source-files:
     README.md
     ChangeLog.md
@@ -98,6 +100,8 @@
       HandcraftedSpec
       JuliaSpec
       Paths_cobot
+  autogen-modules:
+      Paths_cobot
   hs-source-dirs:
       test
   default-extensions:
@@ -141,6 +145,8 @@
   type: exitcode-stdio-1.0
   main-is: Main.hs
   other-modules:
+      Paths_cobot
+  autogen-modules:
       Paths_cobot
   hs-source-dirs:
       bench
diff --git a/src/Bio/Chain/Alignment/Algorithms.hs b/src/Bio/Chain/Alignment/Algorithms.hs
--- a/src/Bio/Chain/Alignment/Algorithms.hs
+++ b/src/Bio/Chain/Alignment/Algorithms.hs
@@ -182,6 +182,8 @@
     {-# INLINE traceStart #-}
     traceStart = const defStart
 
+    {-# SPECIALISE scoreMatrix :: IsGap g => GlobalAlignment g Char Char -> Chain Int Char -> Chain Int Char -> Matrix (Chain Int Char) (Chain Int Char) #-}
+    {-# INLINEABLE scoreMatrix #-}
     scoreMatrix :: forall m m' . (Alignable m, Alignable m')
                 => GlobalAlignment g (IxValue m) (IxValue m')
                 -> m
@@ -256,6 +258,8 @@
     {-# INLINE traceStart #-}
     traceStart = const localStart
 
+    {-# SPECIALISE scoreMatrix :: IsGap g => LocalAlignment g Char Char -> Chain Int Char -> Chain Int Char -> Matrix (Chain Int Char) (Chain Int Char) #-}
+    {-# INLINEABLE scoreMatrix #-}
     scoreMatrix :: forall m m' . (Alignable m, Alignable m')
                 => LocalAlignment g (IxValue m) (IxValue m')
                 -> m
@@ -327,6 +331,8 @@
     {-# INLINE traceStart #-}
     traceStart = const semiStart
 
+    {-# SPECIALISE scoreMatrix :: IsGap g => SemiglobalAlignment g Char Char -> Chain Int Char -> Chain Int Char -> Matrix (Chain Int Char) (Chain Int Char) #-}
+    {-# INLINEABLE scoreMatrix #-}
     scoreMatrix :: forall m m' . (Alignable m, Alignable m')
                 => SemiglobalAlignment g (IxValue m) (IxValue m')
                 -> m
diff --git a/test/JuliaSpec.hs b/test/JuliaSpec.hs
--- a/test/JuliaSpec.hs
+++ b/test/JuliaSpec.hs
@@ -25,8 +25,8 @@
     it "Is symmetric (big): " $   score resBig1   `shouldBe` score resBig2
     it "Is symmetric (med): " $   score resMed1   `shouldBe` score resMed2
     it "Is symmetric (small): " $ score resSmall1 `shouldBe` score resSmall2
-    -- | scoremodel = AffineGapScoreModel(EDNAFULL, gap_open=0, gap_extend=-9);
-    -- | pairalign(GlobalAlignment(), a, b, scoremodel)
+    -- scoremodel = AffineGapScoreModel(EDNAFULL, gap_open=0, gap_extend=-9);
+    -- pairalign(GlobalAlignment(), a, b, scoremodel)
     let aAns = "CTCTGCAAGCATAGAGATATTTCACCGGCAATATTTTTCGTTGAAGTGTATTTGTCCCTATTATCACACC\
                 \AGTCATTCCGATGTCGTTAGGGCCGCCTGTTTTACTGGAGTTCCCGTTCGATGTACCCTCCTCCATAGA\
                 \GATTTAGGGGTATAGACCGCGACGGACGGGGCTTGCGAAAGCTGCCCGATAATGGACTTTGACAATAGA\
@@ -111,8 +111,8 @@
     it "Is symmetric (big): " $   score resBig1   `shouldBe` score resBig2
     it "Is symmetric (med): " $   score resMed1   `shouldBe` score resMed2
     it "Is symmetric (small): " $ score resSmall1 `shouldBe` score resSmall2
-    -- | scoremodel = AffineGapScoreModel(EDNAFULL, gap_open=0, gap_extend=-3);
-    -- | pairalign(OverlapAlignment(), a, b, scoremodel)
+    -- scoremodel = AffineGapScoreModel(EDNAFULL, gap_open=0, gap_extend=-3);
+    -- pairalign(OverlapAlignment(), a, b, scoremodel)
     let aAns = "CTCTGCAAGCATAGAGATATTTCACCGGCAATATTTTTCGTTGAAGTGTATTTGTCCCTATTATCACACC\
                 \AGTCATTCCGATGTCGTTAGGGCCGCCTGTTTTACTG--G-AG--TTC--C-CGTTCGATGTACCCTCC\
                 \TCCATAGAGA-TTTAGGGGTA-T-AGACCGCGACGGACGGGGCTTGCGAAAGCTGCCCGATAATGGACT\
@@ -188,8 +188,8 @@
     it "Is symmetric (big): " $   score resBig1   `shouldBe` score resBig2
     it "Is symmetric (med): " $   score resMed1   `shouldBe` score resMed2
     it "Is symmetric (small): " $ score resSmall1 `shouldBe` score resSmall2
-    -- | scoremodel = AffineGapScoreModel(EDNAFULL, gap_open=0, gap_extend=-7);
-    -- | pairalign(LocalAlignment(), a, b, scoremodel)
+    -- scoremodel = AffineGapScoreModel(EDNAFULL, gap_open=0, gap_extend=-7);
+    -- pairalign(LocalAlignment(), a, b, scoremodel)
     let aAns = "TGAA-CAGCCATGCCA-TC-CGCAGGATGCGCC-AGGGAAAAGCCACCCCCAAGAACGACTCCA\
                 \GGGGCCCAAGTATGATGATAGC-GTTAGGCTTGCTCGAAGGCAAACAACTCCGAGG-ATGC-T\
                 \TAGCAGGCCACAACGTGCTCGATAGCACGAGCGTAAGATGCGAACGCAGTAGTACCTAATGCGGGCGAGACATT"
