diff --git a/build-tools/ghc-wrapper b/build-tools/ghc-wrapper
--- a/build-tools/ghc-wrapper
+++ b/build-tools/ghc-wrapper
@@ -9,9 +9,18 @@
 RC=$?
 set -e
 
+set +e
+$1 --version | grep 'version 8'
+GHC8=$?
+set -e
+
 if test ${RC} -eq 0; then
     exec $@ ${CABAL_BUILD_DIR}/cbits/libreedsolomon_*_a-reedsolomon.o \
             ${CABAL_BUILD_DIR}/cbits/reedsolomon_dispatch.o
 else
-    exec $@
+    if test ${GHC8} -eq 0; then
+        exec $@ -fno-warn-redundant-constraints
+    else
+        exec $@
+    fi
 fi
diff --git a/cbits/configure b/cbits/configure
--- a/cbits/configure
+++ b/cbits/configure
@@ -1,6 +1,6 @@
 #! /bin/sh
 # Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.69 for reedsolomon 0.0.4.0.
+# Generated by GNU Autoconf 2.69 for reedsolomon 0.0.4.1.
 #
 # Report bugs to <https://github.com/NicolasT/reedsolomon/issues>.
 #
@@ -580,8 +580,8 @@
 # Identity of this package.
 PACKAGE_NAME='reedsolomon'
 PACKAGE_TARNAME='reedsolomon'
-PACKAGE_VERSION='0.0.4.0'
-PACKAGE_STRING='reedsolomon 0.0.4.0'
+PACKAGE_VERSION='0.0.4.1'
+PACKAGE_STRING='reedsolomon 0.0.4.1'
 PACKAGE_BUGREPORT='https://github.com/NicolasT/reedsolomon/issues'
 PACKAGE_URL='https://github.com/NicolasT/reedsolomon'
 
@@ -1297,7 +1297,7 @@
   # Omit some internal or obsolete options to make the list less imposing.
   # This message is too long to be a string in the A/UX 3.1 sh.
   cat <<_ACEOF
-\`configure' configures reedsolomon 0.0.4.0 to adapt to many kinds of systems.
+\`configure' configures reedsolomon 0.0.4.1 to adapt to many kinds of systems.
 
 Usage: $0 [OPTION]... [VAR=VALUE]...
 
@@ -1367,7 +1367,7 @@
 
 if test -n "$ac_init_help"; then
   case $ac_init_help in
-     short | recursive ) echo "Configuration of reedsolomon 0.0.4.0:";;
+     short | recursive ) echo "Configuration of reedsolomon 0.0.4.1:";;
    esac
   cat <<\_ACEOF
 
@@ -1462,7 +1462,7 @@
 test -n "$ac_init_help" && exit $ac_status
 if $ac_init_version; then
   cat <<\_ACEOF
-reedsolomon configure 0.0.4.0
+reedsolomon configure 0.0.4.1
 generated by GNU Autoconf 2.69
 
 Copyright (C) 2012 Free Software Foundation, Inc.
@@ -1872,7 +1872,7 @@
 This file contains any messages produced by compilers while
 running configure, to aid debugging if configure makes a mistake.
 
-It was created by reedsolomon $as_me 0.0.4.0, which was
+It was created by reedsolomon $as_me 0.0.4.1, which was
 generated by GNU Autoconf 2.69.  Invocation command line was
 
   $ $0 $@
@@ -2740,7 +2740,7 @@
 
 # Define the identity of the package.
  PACKAGE='reedsolomon'
- VERSION='0.0.4.0'
+ VERSION='0.0.4.1'
 
 
 cat >>confdefs.h <<_ACEOF
@@ -7249,7 +7249,7 @@
 # report actual input values of CONFIG_FILES etc. instead of their
 # values after options handling.
 ac_log="
-This file was extended by reedsolomon $as_me 0.0.4.0, which was
+This file was extended by reedsolomon $as_me 0.0.4.1, which was
 generated by GNU Autoconf 2.69.  Invocation command line was
 
   CONFIG_FILES    = $CONFIG_FILES
@@ -7316,7 +7316,7 @@
 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
 ac_cs_version="\\
-reedsolomon config.status 0.0.4.0
+reedsolomon config.status 0.0.4.1
 configured by $0, generated by GNU Autoconf 2.69,
   with options \\"\$ac_cs_config\\"
 
diff --git a/reedsolomon.cabal b/reedsolomon.cabal
--- a/reedsolomon.cabal
+++ b/reedsolomon.cabal
@@ -1,5 +1,5 @@
 Name:                reedsolomon
-Version:             0.0.4.0
+Version:             0.0.4.1
 Synopsis:            Reed-Solomon Erasure Coding in Haskell
 Description:         Please see README.md
 Homepage:            http://github.com/NicolasT/reedsolomon
@@ -77,7 +77,7 @@
                      , Data.Vector.Generic.Exceptions
                      , Data.Vector.Generic.Lifted
                      , Data.Vector.Generic.Sized
-  Build-Depends:       base >= 4.7 && < 4.9
+  Build-Depends:       base >= 4.7 && < 4.10
                      , vector >= 0.10 && < 0.12
                      , loop >= 0.2 && < 0.4
                      , primitive >= 0.6 && < 0.7
@@ -90,6 +90,8 @@
   Ghc-Options:         -Wall -Odph
   if impl(ghc >= 7.10)
     Ghc-Options:       -g
+  if impl(ghc >= 8.0)
+    Ghc-Options:       -fno-warn-redundant-constraints
   Ghc-Prof-Options:    -fprof-auto
 
   if !flag(SIMD)
@@ -169,7 +171,7 @@
                      , deepseq >= 1.3 && < 1.5
                      , random >= 1.1 && < 1.2
                      , optparse-applicative >= 0.11 && < 0.13
-                     , clock >= 0.4 && < 0.7
+                     , clock >= 0.4 && < 0.8
                      , reedsolomon
   else
     Buildable:         False
@@ -206,13 +208,15 @@
                      , tasty-hunit > 0.9 && < 0.10
                      , tasty-quickcheck >= 0.8 && < 0.9
                      , tasty-ant-xml >= 1.0 && < 1.1
-                     , QuickCheck >= 2.7 && < 2.9
+                     , QuickCheck >= 2.7 && < 2.10
                      , random >= 1.1 && < 1.2
                      , reedsolomon
   Default-Language:    Haskell2010
   Ghc-Options:         -threaded -rtsopts -with-rtsopts=-N -Wall -Odph
   if impl(ghc >= 7.10)
     Ghc-Options:       -g
+  if impl(ghc >= 8.0)
+    Ghc-Options:       -fno-warn-redundant-constraints
   if flag(LLVM)
     Ghc-Options:       -fllvm
   Ghc-Prof-Options:    -fprof-auto
@@ -247,6 +251,8 @@
   Ghc-Options:         -rtsopts -Wall -Odph
   if impl(ghc >= 7.10)
     Ghc-Options:       -g
+  if impl(ghc >= 8.0)
+    Ghc-Options:       -fno-warn-redundant-constraints
   if flag(LLVM)
     Ghc-Options:       -fllvm
   Ghc-Prof-Options:    -fprof-auto
diff --git a/src/Data/ReedSolomon.lhs b/src/Data/ReedSolomon.lhs
--- a/src/Data/ReedSolomon.lhs
+++ b/src/Data/ReedSolomon.lhs
@@ -159,13 +159,17 @@
 }
 
 > -- | A Reed-Solomon encoder.
-> data Encoder = Encoder { rsDataShards :: Int
->                        , rsParityShards :: Int
->                        , rsShards :: Int
+> data Encoder = Encoder { rsDataShards :: {-# UNPACK #-} !Int
+>                        , rsParityShards :: {-# UNPACK #-} !Int
 >                        , rsM :: Matrix
->                        , rsParity :: Matrix
 >                        }
 >   deriving (Show, Eq, Typeable)
+>
+> rsShards :: Encoder -> Int
+> rsShards enc = rsDataShards enc + rsParityShards enc
+>
+> rsParity :: Encoder -> Matrix
+> rsParity enc = V.drop (rsDataShards enc) (rsM enc)
 
 > type MMatrix s = V.Vector (SV.MVector s Word8)
 
@@ -251,13 +255,9 @@
 >         top' <- Matrix.invert top
 >         m <- Matrix.multiply vm top'
 >
->         let parity = V.drop dataShards m
->
 >         return $ Encoder { rsDataShards = dataShards
 >                          , rsParityShards = parityShards
->                          , rsShards = shards
 >                          , rsM = m
->                          , rsParity = parity
 >                          }
 
 // ErrTooFewShards is returned if too few shards where given to
diff --git a/src/Data/ReedSolomon/BuildInfo.hs b/src/Data/ReedSolomon/BuildInfo.hs
--- a/src/Data/ReedSolomon/BuildInfo.hs
+++ b/src/Data/ReedSolomon/BuildInfo.hs
@@ -82,7 +82,15 @@
 #endif
 
 #ifdef __GLASGOW_HASKELL_LLVM__
+# if __GLASGOW_HASKELL__ == 800 && __GLASGOW_HASKELL_PATCHLEVEL1__ == 1
+    -- GHC 8.0.1 has a tuple as value of __GLASGOW_HASKELL_LLVM__, not
+    -- a plain Int, due to some changes in 29310b62 and the usage of `show`
+    -- Unless this becomes 'official API', treat it as a version-specific
+    -- mistake
+    toolLLVM = let (major, minor) = __GLASGOW_HASKELL_LLVM__ in Just (10 * major + minor)
+# else
     toolLLVM = Just  __GLASGOW_HASKELL_LLVM__
+# endif
 #else
     toolLLVM = Nothing
 #endif
diff --git a/src/Data/ReedSolomon/Galois/SIMD.lhs b/src/Data/ReedSolomon/Galois/SIMD.lhs
--- a/src/Data/ReedSolomon/Galois/SIMD.lhs
+++ b/src/Data/ReedSolomon/Galois/SIMD.lhs
@@ -1,4 +1,5 @@
 > {-# LANGUAGE DataKinds #-}
+
 > module Data.ReedSolomon.Galois.SIMD (
 >       galMulSlice
 >     , galMulSliceXor
diff --git a/stack.yaml b/stack.yaml
--- a/stack.yaml
+++ b/stack.yaml
@@ -1,4 +1,7 @@
 packages:
 - '.'
 
-resolver: lts-5.3
+extra-deps:
+- bytestring-mmap-0.2.2
+
+resolver: lts-7.0
