diff --git a/README.md b/README.md
--- a/README.md
+++ b/README.md
@@ -1,4 +1,4 @@
-# wkt-geom [![Build Status](https://travis-ci.org/indicatrix/wkt-geom.png?branch=master)](https://travis-ci.org/indicatrix/wkt-geom) [Hackage](https://hackage.haskell.org/package/wkt-geom)
+# wkt-geom ![Haskell CI](https://github.com/zellige/wkt-geom/workflows/Haskell%20CI/badge.svg) [Hackage](https://hackage.haskell.org/package/wkt-geom)
 
 A parser for Well Known Text (WKT), Well Known Binary (WKB) and the PostgreSQL extension Extended Well Know Binary (eWKB).
 
diff --git a/src/Data/Hex.hs b/src/Data/Hex.hs
--- a/src/Data/Hex.hs
+++ b/src/Data/Hex.hs
@@ -8,18 +8,12 @@
 import qualified Data.ByteString.Char8  as ByteStringChar8
 import qualified Data.ByteString.Lazy   as LazyByteString
 import qualified Data.Geospatial        as Geospatial
-import           Data.Monoid            ((<>))
 
 newtype Hex = Hex ByteString.ByteString
 
 safeConvert :: (LazyByteString.ByteString -> Either String Geospatial.GeospatialGeometry) -> Hex -> Either String Geospatial.GeospatialGeometry
 safeConvert f (Hex byteString) =
-  let
-    (decoded, rest) = ByteStringBase16.decode byteString
-  in
-    if ByteString.null rest then
-      f $ LazyByteString.fromStrict decoded
-    else
-      Left ("Invalid hex representation: " <> ByteStringChar8.unpack byteString)
-
+    case ByteStringBase16.decode byteString of
+         Left  _       -> Left $ "Invalid hex representation: " <> ByteStringChar8.unpack byteString
+         Right decoded -> f    $ LazyByteString.fromStrict decoded
 
diff --git a/src/Data/Internal/Ewkb/Geometry.hs b/src/Data/Internal/Ewkb/Geometry.hs
--- a/src/Data/Internal/Ewkb/Geometry.hs
+++ b/src/Data/Internal/Ewkb/Geometry.hs
@@ -11,7 +11,6 @@
 import qualified Data.Binary.Get            as BinaryGet
 import           Data.Bits                  ((.&.), (.|.))
 import qualified Data.ByteString.Builder    as ByteStringBuilder
-import           Data.Monoid                ((<>))
 import qualified Data.Word                  as Word
 
 import qualified Data.Internal.Wkb.Endian   as Endian
diff --git a/src/Data/Internal/Wkb/GeometryCollection.hs b/src/Data/Internal/Wkb/GeometryCollection.hs
--- a/src/Data/Internal/Wkb/GeometryCollection.hs
+++ b/src/Data/Internal/Wkb/GeometryCollection.hs
@@ -9,7 +9,6 @@
 import qualified Data.ByteString.Builder    as ByteStringBuilder
 import qualified Data.Foldable              as Foldable
 import qualified Data.Geospatial            as Geospatial
-import           Data.Monoid                ((<>))
 import qualified Data.Sequence              as Sequence
 
 import qualified Data.Internal.Wkb.Endian   as Endian
diff --git a/src/Data/Internal/Wkb/Line.hs b/src/Data/Internal/Wkb/Line.hs
--- a/src/Data/Internal/Wkb/Line.hs
+++ b/src/Data/Internal/Wkb/Line.hs
@@ -11,7 +11,6 @@
 import qualified Data.Foldable                        as Foldable
 import qualified Data.Geospatial                      as Geospatial
 import qualified Data.LineString                      as LineString
-import           Data.Monoid                          ((<>))
 import qualified Data.Sequence                        as Sequence
 
 
diff --git a/src/Data/Internal/Wkb/Point.hs b/src/Data/Internal/Wkb/Point.hs
--- a/src/Data/Internal/Wkb/Point.hs
+++ b/src/Data/Internal/Wkb/Point.hs
@@ -14,7 +14,6 @@
 import qualified Data.ByteString.Builder              as ByteStringBuilder
 import qualified Data.Foldable                        as Foldable
 import qualified Data.Geospatial                      as Geospatial
-import           Data.Monoid                          ((<>))
 import qualified Data.Monoid                          as Monoid
 import qualified Data.Sequence                        as Sequence
 import qualified Data.Word                            as Word
diff --git a/src/Data/Internal/Wkb/Polygon.hs b/src/Data/Internal/Wkb/Polygon.hs
--- a/src/Data/Internal/Wkb/Polygon.hs
+++ b/src/Data/Internal/Wkb/Polygon.hs
@@ -11,7 +11,6 @@
 import qualified Data.Foldable                        as Foldable
 import qualified Data.Geospatial                      as Geospatial
 import qualified Data.LinearRing                      as LinearRing
-import           Data.Monoid                          ((<>))
 import qualified Data.Sequence                        as Sequence
 
 import qualified Data.Internal.Wkb.Endian             as Endian
diff --git a/test/Data/Internal/Wkb/PolygonSpec.hs b/test/Data/Internal/Wkb/PolygonSpec.hs
--- a/test/Data/Internal/Wkb/PolygonSpec.hs
+++ b/test/Data/Internal/Wkb/PolygonSpec.hs
@@ -3,18 +3,15 @@
 module Data.Internal.Wkb.PolygonSpec where
 
 import qualified Data.ByteString.Builder as ByteStringBuilder
-import           Data.Monoid             ((<>))
-import           Test.Hspec              (Spec, describe, it, shouldBe)
-
-import qualified Data.SpecHelper         as SpecHelper
-import qualified Data.Wkb                as Wkb
+import qualified Data.SpecHelper as SpecHelper
+import qualified Data.Wkb as Wkb
+import Test.Hspec (Spec, describe, it, shouldBe)
 
 spec :: Spec
 spec = do
   testWkbPolygonParsing
   testWkbMultiPolygonParsing
 
-
 -- Test Wkb Polygon Parsing
 
 testWkbPolygonParsing :: Spec
@@ -31,21 +28,21 @@
 testInvalidWkbPolyonParsing =
   it "does not parse bad wkb polygon" $
     Wkb.parseByteString exampleBadWkbPolygon `shouldBe` Left "Could not parse wkb: First and last points of linear ring are different: first=GeoPointXY (PointXY {_xyX = 1.0, _xyY = 2.0}) last=GeoPointXY (PointXY {_xyX = 7.0, _xyY = 8.0})"
-  where exampleBadWkbPolygon =
-          ByteStringBuilder.toLazyByteString $
-            ByteStringBuilder.word8 0
-            <> ByteStringBuilder.int32BE 3
-            <> ByteStringBuilder.int32BE 1
-            <> ByteStringBuilder.int32BE 4
-            <> ByteStringBuilder.doubleBE 1.0
-            <> ByteStringBuilder.doubleBE 2.0
-            <> ByteStringBuilder.doubleBE 3.0
-            <> ByteStringBuilder.doubleBE 4.0
-            <> ByteStringBuilder.doubleBE 5.0
-            <> ByteStringBuilder.doubleBE 6.0
-            <> ByteStringBuilder.doubleBE 7.0
-            <> ByteStringBuilder.doubleBE 8.0
-
+  where
+    exampleBadWkbPolygon =
+      ByteStringBuilder.toLazyByteString $
+        ByteStringBuilder.word8 0
+          <> ByteStringBuilder.int32BE 3
+          <> ByteStringBuilder.int32BE 1
+          <> ByteStringBuilder.int32BE 4
+          <> ByteStringBuilder.doubleBE 1.0
+          <> ByteStringBuilder.doubleBE 2.0
+          <> ByteStringBuilder.doubleBE 3.0
+          <> ByteStringBuilder.doubleBE 4.0
+          <> ByteStringBuilder.doubleBE 5.0
+          <> ByteStringBuilder.doubleBE 6.0
+          <> ByteStringBuilder.doubleBE 7.0
+          <> ByteStringBuilder.doubleBE 8.0
 
 -- Test Wkb MultiPolygon Parsing
 
diff --git a/wkt-geom.cabal b/wkt-geom.cabal
--- a/wkt-geom.cabal
+++ b/wkt-geom.cabal
@@ -1,5 +1,5 @@
 name:                  wkt-geom
-version:               0.0.11
+version:               0.0.12
 synopsis:              A parser of WKT, WKB and eWKB.
 description:           Well Known Text (WKT), Well Known Binary (WKB) and the PostgreSQL extension Extended Well Know Binary (eWKB) are vector geometry representations.
                      .
@@ -86,11 +86,11 @@
                      , bytestring                   >= 0.10
                      , containers                   >= 0.5.10.1
                      , geojson                      >= 4.0.1
-                     , hedgehog          < 0.7 &&   >= 0.5
-                     , hspec             < 3 &&     >= 2.4
+                     , hedgehog          < 1.1 &&   >= 1.0
+                     , hspec             < 3 &&     >= 2.7
                      , hw-hspec-hedgehog < 0.2 &&   >= 0.1.0.4
-                     , lens              < 4.18 &&  >= 4
-                     , QuickCheck        < 2.13 &&  > 2.7
+                     , lens              < 5 &&     >= 4.1
+                     , QuickCheck        < 2.15 &&  >= 2.7
                      , scientific                   >= 0.3.6
                      , trifecta                     >= 1.7
                      , vector                       >= 0.10            
