diff --git a/platform/linux/System/Socket/Family/Unix/Platform.hsc b/platform/linux/System/Socket/Family/Unix/Platform.hsc
--- a/platform/linux/System/Socket/Family/Unix/Platform.hsc
+++ b/platform/linux/System/Socket/Family/Unix/Platform.hsc
@@ -22,7 +22,7 @@
 import           Data.ByteString.Unsafe (unsafeUseAsCStringLen)
 import qualified Data.ByteString as B
 
-import           System.Socket (SocketAddress)
+import           System.Socket (SocketAddress, Family(..))
 import           System.Socket.Family.Unix.Internal (Unix)
 
 #include "hs_socket.h"
@@ -31,17 +31,20 @@
 #let alignment t = "%lu", (unsigned long)offsetof(struct {char x__; t (y__); }, y__)
 #endif
 
--- | A Unix socket address
-data instance SocketAddress Unix
-    -- | Address is connected to a filesystem pathname. When used to bind
-    -- a socket file with this name is created in the file system.
-    = SocketAddressUnixPath ByteString
-    -- | Address is in abstract namespace which is a Linux-specific feature
-    -- that allows us to bind a UNIX domain socket to a name without that
-    -- name being created in the file system.
-    | SocketAddressUnixAbstract ByteString
-    deriving (Eq, Show)
+instance Family Unix where
+    familyNumber _ = (#const AF_UNIX)
 
+    -- | A Unix socket address
+    data SocketAddress Unix
+        -- | Address is connected to a filesystem pathname. When used to bind
+        -- a socket file with this name is created in the file system.
+        = SocketAddressUnixPath ByteString
+        -- | Address is in abstract namespace which is a Linux-specific feature
+        -- that allows us to bind a UNIX domain socket to a name without that
+        -- name being created in the file system.
+        | SocketAddressUnixAbstract ByteString
+        deriving (Eq, Show)
+
 -- | The maximal length of a address path.
 -- SUSv3 doesn’t specify the size of the sun_path field. Early BSD
 -- implementations used 108 and 104 bytes, and one contemporary implementation
@@ -97,3 +100,4 @@
       where
         sun_family = (#ptr struct sockaddr_un, sun_family)
         sun_path   = (#ptr struct sockaddr_un, sun_path)
+
diff --git a/platform/unix/System/Socket/Family/Unix/Platform.hsc b/platform/unix/System/Socket/Family/Unix/Platform.hsc
--- a/platform/unix/System/Socket/Family/Unix/Platform.hsc
+++ b/platform/unix/System/Socket/Family/Unix/Platform.hsc
@@ -21,7 +21,7 @@
 import           Data.ByteString.Unsafe (unsafeUseAsCStringLen)
 import qualified Data.ByteString as B
 
-import           System.Socket (SocketAddress)
+import           System.Socket (SocketAddress, Family(..))
 import           System.Socket.Family.Unix.Internal (Unix)
 
 #include "hs_socket.h"
@@ -30,12 +30,15 @@
 #let alignment t = "%lu", (unsigned long)offsetof(struct {char x__; t (y__); }, y__)
 #endif
 
--- | A Unix socket address
-data instance SocketAddress Unix
-    -- | Address is connected to a filesystem pathname. When used to bind
-    -- a socket file with this name is created in the file system.
-    = SocketAddressUnixPath ByteString
-    deriving (Eq, Show)
+instance Family Unix where
+    familyNumber _ = (#const AF_UNIX)
+
+    -- | A Unix socket address
+    data SocketAddress Unix
+        -- | Address is connected to a filesystem pathname. When used to bind
+        -- a socket file with this name is created in the file system.
+        = SocketAddressUnixPath ByteString
+        deriving (Eq, Show)
 
 -- | The maximal length of a address path.
 -- SUSv3 doesn’t specify the size of the sun_path field. Early BSD
diff --git a/socket-unix.cabal b/socket-unix.cabal
--- a/socket-unix.cabal
+++ b/socket-unix.cabal
@@ -1,5 +1,5 @@
 name:                socket-unix
-version:             0.1.1.0
+version:             0.2.0.0
 synopsis:            Unix domain sockets
 description:         A Unix domain socket extension for the socket library
 homepage:            https://github.com/vyacheslavhashov/haskell-socket-unix#readme
@@ -24,10 +24,10 @@
   other-modules:       System.Socket.Family.Unix.Internal
                        System.Socket.Family.Unix.Platform
   build-depends:       base         >= 4.7      && < 5
-                     , socket       >= 0.6.0.0  && < 0.8.0.0
+                     , socket       >= 0.8.0.0  && < 0.9.0.0
                      , bytestring   >= 0.10.0.0 && < 0.11
 
-  ghc-options:         -Wall
+  ghc-options:         -Wall -O2
   default-language:    Haskell2010
 
 test-suite default
@@ -41,7 +41,7 @@
   other-modules:       Internal
                        Platform
   build-depends:       base         >= 4.7      && < 5
-                     , socket       >= 0.6.0.0  && < 0.8.0.0
+                     , socket       >= 0.8.0.0  && < 0.9.0.0
                      , socket-unix
                      , tasty        >= 0.11     && < 0.12
                      , tasty-hunit  >= 0.9      && < 0.10
@@ -61,7 +61,7 @@
   other-modules:       Internal
                        Platform
   build-depends:       base         >= 4.7      && < 5
-                     , socket       >= 0.6.0.0  && < 0.8.0.0
+                     , socket       >= 0.8.0.0  && < 0.9.0.0
                      , socket-unix
                      , tasty        >= 0.11     && < 0.12
                      , tasty-hunit  >= 0.9      && < 0.10
diff --git a/src/System/Socket/Family/Unix/Internal.hsc b/src/System/Socket/Family/Unix/Internal.hsc
--- a/src/System/Socket/Family/Unix/Internal.hsc
+++ b/src/System/Socket/Family/Unix/Internal.hsc
@@ -8,7 +8,7 @@
     , eNoEntry
     ) where
 
-import System.Socket (Family(..), Protocol(..), SocketException(..))
+import System.Socket (SocketException(..))
 
 #include "hs_socket.h"
 
@@ -20,11 +20,6 @@
 -- (https://en.wikipedia.org/wiki/Unix_domain_socket)
 data Unix
 
-instance Family Unix where
-    familyNumber _ = (#const AF_UNIX)
-
-instance Protocol Unix where
-    protocolNumber _ = 0
 
 -- | > SocketException "No such file or directory"
 eNoEntry :: SocketException
diff --git a/test/Internal.hs b/test/Internal.hs
--- a/test/Internal.hs
+++ b/test/Internal.hs
@@ -14,6 +14,7 @@
 import System.Socket
 import System.Socket.Type.Stream
 import System.Socket.Type.Datagram
+import System.Socket.Protocol.Default
 import System.Socket.Family.Unix
 
 groupUnixPathname :: TestTree
@@ -68,15 +69,15 @@
 clientAbstractPath :: ByteString
 clientAbstractPath = "/tmp/FieNg4shamo4Thie.socket"
 
-unixSocketStream :: IO (Socket Unix Stream Unix)
+unixSocketStream :: IO (Socket Unix Stream Default)
 unixSocketStream = socket
 
-unixSocketDatagram :: IO (Socket Unix Datagram Unix)
+unixSocketDatagram :: IO (Socket Unix Datagram Default)
 unixSocketDatagram = socket
 
 testServerClientStream
     :: SocketAddress Unix
-    -> (Socket Unix Stream Unix, Socket Unix Stream Unix)
+    -> (Socket Unix Stream Default, Socket Unix Stream Default)
     -> IO ()
 testServerClientStream addr (server, client) = do
     bind server addr
@@ -97,7 +98,7 @@
 testServerClientDatagram
     :: SocketAddress Unix
     -> SocketAddress Unix
-    -> (Socket Unix Datagram Unix, Socket Unix Datagram Unix)
+    -> (Socket Unix Datagram Default, Socket Unix Datagram Default)
     -> IO ()
 testServerClientDatagram sAddr cAddr (server, client) = do
     bind server sAddr
