diff --git a/ChangeLog.md b/ChangeLog.md
--- a/ChangeLog.md
+++ b/ChangeLog.md
@@ -1,5 +1,9 @@
 # Revision history for wide-word
 
+## 0.1.0.3  -- 2017-04-05
+
+* Make it build with ghc 8.2.
+
 ## 0.1.0.2  -- 2017-02-08
 
 * Add NFData instances for Word128 and Int128.
diff --git a/Data/WideWord/Int128.hs b/Data/WideWord/Int128.hs
--- a/Data/WideWord/Int128.hs
+++ b/Data/WideWord/Int128.hs
@@ -1,3 +1,4 @@
+{-# LANGUAGE BangPatterns #-}
 {-# LANGUAGE CPP #-}
 {-# LANGUAGE MagicHash #-}
 {-# LANGUAGE MultiParamTypeClasses #-}
@@ -200,7 +201,7 @@
 plus128 (Int128 (W64# a1) (W64# a0)) (Int128 (W64# b1) (W64# b0)) =
   Int128 (W64# s1) (W64# s0)
   where
-    (# c1, s0 #) = plusWord2# a0 b0
+    !(# c1, s0 #) = plusWord2# a0 b0
     s1a = plusWord# a1 b1
     s1 = plusWord# c1 s1a
 
@@ -209,7 +210,7 @@
 minus128 (Int128 (W64# a1) (W64# a0)) (Int128 (W64# b1) (W64# b0)) =
   Int128 (W64# d1) (W64# d0)
   where
-    (# d0, c1 #) = subWordC# a0 b0
+    !(# d0, c1 #) = subWordC# a0 b0
     a1c = minusWord# a1 (int2Word# c1)
     d1 = minusWord# a1c b1
 
@@ -217,7 +218,7 @@
 times128 (Int128 (W64# a1) (W64# a0)) (Int128 (W64# b1) (W64# b0)) =
   Int128 (W64# p1) (W64# p0)
   where
-    (# c1, p0 #) = timesWord2# a0 b0
+    !(# c1, p0 #) = timesWord2# a0 b0
     p1a = timesWord# a1 b0
     p1b = timesWord# a0 b1
     p1c = plusWord# p1a p1b
diff --git a/Data/WideWord/Word128.hs b/Data/WideWord/Word128.hs
--- a/Data/WideWord/Word128.hs
+++ b/Data/WideWord/Word128.hs
@@ -1,3 +1,4 @@
+{-# LANGUAGE BangPatterns #-}
 {-# LANGUAGE CPP #-}
 {-# LANGUAGE MagicHash #-}
 {-# LANGUAGE StrictData #-}
@@ -204,7 +205,7 @@
 plus128 (Word128 (W64# a1) (W64# a0)) (Word128 (W64# b1) (W64# b0)) =
   Word128 (W64# s1) (W64# s0)
   where
-    (# c1, s0 #) = plusWord2# a0 b0
+    !(# c1, s0 #) = plusWord2# a0 b0
     s1a = plusWord# a1 b1
     s1 = plusWord# c1 s1a
 
@@ -213,7 +214,7 @@
 minus128 (Word128 (W64# a1) (W64# a0)) (Word128 (W64# b1) (W64# b0)) =
   Word128 (W64# d1) (W64# d0)
   where
-    (# d0, c1 #) = subWordC# a0 b0
+    !(# d0, c1 #) = subWordC# a0 b0
     a1c = minusWord# a1 (int2Word# c1)
     d1 = minusWord# a1c b1
 
@@ -221,7 +222,7 @@
 times128 (Word128 (W64# a1) (W64# a0)) (Word128 (W64# b1) (W64# b0)) =
   Word128 (W64# p1) (W64# p0)
   where
-    (# c1, p0 #) = timesWord2# a0 b0
+    !(# c1, p0 #) = timesWord2# a0 b0
     p1a = timesWord# a1 b0
     p1b = timesWord# a0 b1
     p1c = plusWord# p1a p1b
diff --git a/wide-word.cabal b/wide-word.cabal
--- a/wide-word.cabal
+++ b/wide-word.cabal
@@ -2,7 +2,7 @@
 -- documentation, see http://haskell.org/cabal/users-guide/
 
 name:                wide-word
-version:             0.1.0.2
+version:             0.1.0.3
 synopsis:            Data types for large but fixed width signed and unsigned integers
 description:
   A library to provide data types for large (ie > 64 bits) but fixed width signed
@@ -50,6 +50,6 @@
   build-depends:       base                          >= 4.8         && < 5.0
                      , bytestring                    >= 0.10
                      , ghc-prim
-                     , hspec                         == 2.3.*
+                     , hspec                         >= 2.3         && < 2.5
                      , QuickCheck                    == 2.9.*
                      , wide-word
