diff --git a/Network/Socks5/Command.hs b/Network/Socks5/Command.hs
--- a/Network/Socks5/Command.hs
+++ b/Network/Socks5/Command.hs
@@ -39,7 +39,7 @@
     sendAll socket (encode $ SocksHello methods)
     getSocksHelloResponseMethod <$> runGetDone get (recv socket 4096)
 
-newtype Connect = Connect SocksAddress deriving (Show,Eq)
+newtype Connect = Connect SocksAddress deriving (Show,Eq,Ord)
 
 class Command a where
     toRequest   :: a -> SocksRequest
diff --git a/Network/Socks5/Conf.hs b/Network/Socks5/Conf.hs
--- a/Network/Socks5/Conf.hs
+++ b/Network/Socks5/Conf.hs
@@ -1,3 +1,11 @@
+-- |
+-- Module      : Network.Socks5.Conf
+-- License     : BSD-style
+-- Maintainer  : Vincent Hanquez <vincent@snarc.org>
+-- Stability   : experimental
+-- Portability : unknown
+--
+-- typical SOCKS configuration
 module Network.Socks5.Conf
     ( SocksConf(..)
     , socksHost
diff --git a/Network/Socks5/Types.hs b/Network/Socks5/Types.hs
--- a/Network/Socks5/Types.hs
+++ b/Network/Socks5/Types.hs
@@ -21,40 +21,79 @@
 import Data.Data
 import Network.Socket (HostAddress, HostAddress6, PortNumber)
 import Control.Exception
+import qualified Data.ByteString.Char8 as BC
+import Numeric (showHex)
+import Data.List (intersperse)
 
 -- | Socks Version
 data SocksVersion = SocksVer5
-                  deriving (Show,Eq)
+                  deriving (Show,Eq,Ord)
 
+-- | Command that can be send and receive on the SOCKS protocol
 data SocksCommand =
       SocksCommandConnect
     | SocksCommandBind
     | SocksCommandUdpAssociate
-    | SocksCommandOther Word8
+    | SocksCommandOther !Word8
     deriving (Show,Eq,Ord)
 
+-- | Authentication methods available on the SOCKS protocol.
+--
+-- Only SocksMethodNone is effectively implemented, but
+-- other value are enumerated for completeness.
 data SocksMethod =
       SocksMethodNone
     | SocksMethodGSSAPI
     | SocksMethodUsernamePassword
-    | SocksMethodOther Word8
+    | SocksMethodOther !Word8
     | SocksMethodNotAcceptable
     deriving (Show,Eq,Ord)
 
+-- | A Host address on the SOCKS protocol.
 data SocksHostAddress =
-      SocksAddrIPV4 HostAddress
-    | SocksAddrDomainName ByteString
-    | SocksAddrIPV6 HostAddress6
-    deriving (Show,Eq)
+      SocksAddrIPV4 !HostAddress
+    | SocksAddrDomainName !ByteString
+    | SocksAddrIPV6 !HostAddress6
+    deriving (Eq,Ord)
 
-data SocksAddress = SocksAddress SocksHostAddress PortNumber
-    deriving (Show,Eq)
+instance Show SocksHostAddress where
+    show (SocksAddrIPV4 ha)       = "SocksAddrIPV4(" ++ showHostAddress ha ++ ")"
+    show (SocksAddrIPV6 ha6)      = "SocksAddrIPV6(" ++ showHostAddress6 ha6 ++ ")"
+    show (SocksAddrDomainName dn) = "SocksAddrDomainName(" ++ BC.unpack dn ++ ")"
 
+-- | Converts a HostAddress to a String in dot-decimal notation
+showHostAddress :: HostAddress -> String
+showHostAddress num = concat [show q1, ".", show q2, ".", show q3, ".", show q4]
+  where (num',q1)   = num `quotRem` 256
+        (num'',q2)  = num' `quotRem` 256
+        (num''',q3) = num'' `quotRem` 256
+        (_,q4)      = num''' `quotRem` 256
+
+-- | Converts a IPv6 HostAddress6 to standard hex notation
+showHostAddress6 :: HostAddress6 -> String
+showHostAddress6 (a,b,c,d) =
+    (concat . intersperse ":" . map (flip showHex ""))
+        [p1,p2,p3,p4,p5,p6,p7,p8]
+    where (a',p2) = a `quotRem` 65536
+          (_,p1)  = a' `quotRem` 65536
+          (b',p4) = b `quotRem` 65536
+          (_,p3)  = b' `quotRem` 65536
+          (c',p6) = c `quotRem` 65536
+          (_,p5)  = c' `quotRem` 65536
+          (d',p8) = d `quotRem` 65536
+          (_,p7)  = d' `quotRem` 65536
+
+-- | Describe a Socket address on the SOCKS protocol
+data SocksAddress = SocksAddress !SocksHostAddress !PortNumber
+    deriving (Show,Eq,Ord)
+
+-- | Type of reply on the SOCKS protocol
 data SocksReply =
       SocksReplySuccess
     | SocksReplyError SocksError
     deriving (Show,Eq,Ord,Data,Typeable)
 
+-- | SOCKS error that can be received or sent
 data SocksError =
       SocksErrorGeneralServerFailure
     | SocksErrorConnectionNotAllowedByRule
@@ -67,6 +106,9 @@
     | SocksErrorOther Word8
     deriving (Show,Eq,Ord,Data,Typeable)
 
+-- | Exception returned when using a SOCKS version that is not supported.
+--
+-- This package only implement version 5.
 data SocksVersionNotSupported = SocksVersionNotSupported
     deriving (Show,Data,Typeable)
 
diff --git a/socks.cabal b/socks.cabal
--- a/socks.cabal
+++ b/socks.cabal
@@ -1,5 +1,5 @@
 Name:                socks
-Version:             0.5.0
+Version:             0.5.1
 Description:         Socks proxy (version 5) implementation.
 License:             BSD3
 License-file:        LICENSE
