@@ -242,7 +242,9 @@ defaultHints = AddrInfo {
242242--
243243-- >>> addr:_ <- getAddrInfo (Just hints) (Just "127.0.0.1") (Just "http")
244244-- >>> addrAddress addr
245- -- 127.0.0.1:80
245+ -- SockAddrInet 80 16777343
246+ -- >>> showSockAddr (addrAddress addr)
247+ -- "127.0.0.1:80"
246248
247249getAddrInfo
248250 :: Maybe AddrInfo -- ^ preferred socket type or protocol
@@ -415,22 +417,29 @@ unpackBits ((k,v):xs) r
415417-----------------------------------------------------------------------------
416418-- SockAddr
417419
418- instance Show SockAddr where
420+ -- | Read a string representing a socket address.
421+ readSockAddr :: PortNumber -> String -> Either String SockAddr
422+ readSockAddr defPort hostport = readSockEndpoint defPort hostport >>= \ r -> case r of
423+ EndpointByName h _ -> Left $ " expected address but got hostname: " <> h
424+ EndpointByAddr a -> Right a
425+
426+ showSockAddr :: SockAddr -> String
419427#if defined(DOMAIN_SOCKET_SUPPORT)
420- showsPrec _ (SockAddrUnix str) = showString str
428+ showSockAddr (SockAddrUnix str) = showString str " "
421429#else
422- showsPrec _ SockAddrUnix {} = error " showsPrec: not supported"
430+ showSockAddr SockAddrUnix {} = error " showsPrec: not supported"
423431#endif
424- showsPrec _ (SockAddrInet port ha)
432+ showSockAddr (SockAddrInet port ha)
425433 = showHostAddress ha
426434 . showString " :"
427435 . shows port
428- showsPrec _ (SockAddrInet6 port _ ha6 _)
436+ $ " "
437+ showSockAddr (SockAddrInet6 port _ ha6 _)
429438 = showChar ' ['
430439 . showHostAddress6 ha6
431440 . showString " ]:"
432441 . shows port
433-
442+ $ " "
434443
435444-- Taken from on the implementation of showIPv4 in Data.IP.Addr
436445showHostAddress :: HostAddress -> ShowS
@@ -512,7 +521,7 @@ readSockEndpoint defPort hostport = case hostport of
512521showSockEndpoint :: SockEndpoint -> String
513522showSockEndpoint n = case n of
514523 EndpointByName h p -> h <> " :" <> show p
515- EndpointByAddr a -> show a
524+ EndpointByAddr a -> showSockAddr a
516525
517526-- | Resolve a socket endpoint into a list of socket addresses.
518527-- The result is always non-empty; Haskell throws an exception if name
0 commit comments