diff --git a/http-link-header.cabal b/http-link-header.cabal
--- a/http-link-header.cabal
+++ b/http-link-header.cabal
@@ -1,5 +1,5 @@
 name:            http-link-header
-version:         1.0.2
+version:         1.0.3
 synopsis:        A parser and writer for the HTTP Link header as specified in RFC 5988 "Web Linking".
 description:     https://github.com/myfreeweb/http-link-header
 category:        Web
@@ -14,7 +14,7 @@
 extra-source-files:
     README.md
 tested-with:
-    GHC == 7.10.3
+    GHC == 8.0.1
 
 source-repository head
     type: git
@@ -27,6 +27,7 @@
       , bytestring
       , errors
       , network-uri
+      , http-api-data
       , attoparsec
       , bytestring-conversion
     default-language: Haskell2010
@@ -48,12 +49,12 @@
       , hspec-attoparsec
     default-language: Haskell2010
     ghc-options: -threaded -fhpc -Wall
-    ghc-prof-options: -auto-all -prof
     hs-source-dirs: test-suite
     main-is: Spec.hs
     other-modules:
         Network.HTTP.Link.ParserSpec
         Network.HTTP.Link.WriterSpec
+        Network.HTTP.LinkSpec
     type: exitcode-stdio-1.0
 
 benchmark benchmarks
diff --git a/library/Network/HTTP/Link.hs b/library/Network/HTTP/Link.hs
--- a/library/Network/HTTP/Link.hs
+++ b/library/Network/HTTP/Link.hs
@@ -9,6 +9,7 @@
 ) where
 
 import           Data.ByteString.Conversion
+import           Web.HttpApiData
 import safe      Network.HTTP.Link.Types
 import safe      Network.HTTP.Link.Writer
 import safe      Network.HTTP.Link.Parser
@@ -18,3 +19,11 @@
 
 instance ToByteString Link where
   builder = builder . writeLink
+
+instance ToHttpApiData [Link] where
+  toUrlPiece = toUrlPiece . writeLinkHeader
+  toHeader = toByteString'
+
+instance ToHttpApiData Link where
+  toUrlPiece = toUrlPiece . writeLink
+  toHeader = toByteString'
diff --git a/test-suite/Network/HTTP/LinkSpec.hs b/test-suite/Network/HTTP/LinkSpec.hs
new file mode 100644
--- /dev/null
+++ b/test-suite/Network/HTTP/LinkSpec.hs
@@ -0,0 +1,33 @@
+{-# LANGUAGE OverloadedStrings, UnicodeSyntax, CPP #-}
+{-# OPTIONS_GHC -fno-warn-orphans #-}
+
+module Network.HTTP.LinkSpec where
+
+import           Test.Hspec
+import           Test.QuickCheck
+#if !MIN_VERSION_base(4,8,0)
+import           Data.Monoid (mconcat)
+#endif
+import qualified Data.Text as T
+import           Data.Maybe (fromJust)
+import           Network.HTTP.Link
+
+instance Arbitrary Link where
+  arbitrary = do
+    urlScheme ← elements ["http://", "https://", "ftp://", "git+ssh://"]
+    urlDomain ← listOf1 $ elements ['a'..'z']
+    urlTld ← elements ["com", "net", "org", "me", "is", "technology", "club"]
+    urlPath ← listOf $ elements ['a'..'z']
+    params ← listOf genParam
+    return $ fromJust $ lnk (mconcat [urlScheme, urlDomain, ".", urlTld, "/", urlPath]) params
+    where genParam = do
+            otherParamKey ← listOf1 $ elements ['a'..'z']
+            paramKey ← elements [Rel, Rev, Title, Hreflang, Anchor, Media, ContentType, Other (T.pack otherParamKey)]
+            paramValue ← listOf $ elements ['a'..'z']
+            return (paramKey, T.pack paramValue)
+
+spec ∷ Spec
+spec = do
+  describe "writeLinkHeader → parseLinkHeader" $
+    it "roundtrips successfully" $
+      property $ \x → parseLinkHeader (writeLinkHeader x) == Just x
