diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,8 @@
+0.4.4 [2018.08.13]
+------------------
+* Avoid the use of failable pattern matches in `do`-notation to support
+  building with GHC 8.6, which enables `MonadFailDesugaring`.
+
 0.4.3 [2018.07.03]
 ------------------
 * Make the test suite compile on GHC 8.6.
diff --git a/ersatz.cabal b/ersatz.cabal
--- a/ersatz.cabal
+++ b/ersatz.cabal
@@ -1,5 +1,5 @@
 name:           ersatz
-version:        0.4.3
+version:        0.4.4
 license:        BSD3
 license-file:   LICENSE
 author:         Edward A. Kmett, Eric Mertens, Johan Kiviniemi
diff --git a/src/Ersatz/BitChar.hs b/src/Ersatz/BitChar.hs
--- a/src/Ersatz/BitChar.hs
+++ b/src/Ersatz/BitChar.hs
@@ -48,7 +48,8 @@
        -- Char upperbound is 0x10ffff, so only set
        -- the high bit when the next 4 bits are 0
 
-    do x:xs <- replicateM 21 (literally m)
+    do x  <- literally m
+       xs <- replicateM 20 (literally m)
 
        let x' = x && nor (take 4 xs)
            n  = Bits (reverse (x':xs)) -- Bits is little endian
