
On 07.11 08:16, Tomasz Zielonka wrote:
Does it make sense to have the address type in there? Most of the time high level applications should not care whether the socket is IPv4 or IPv6 (or something entirely else).
Sometimes applications exchange host addresses between themselves, consider a distributed system like DNS or a peer-to-peer network.
Which is entirely possible. Just use getHost and getService - they should produce values which can be fed back to getAddrInfo. Here is a scetch of a higher level API, does this implement what you were after - and how to make this better? newtype IPv4Address = IPv4 Word32 newtype IPv6Address = IPv6 Word128 newtype UnixAddress = Unix String -- Find a better name newtype AnyAddress = AnyAddr (SocketType,SocketAddress) class Resolver addrt where resolve :: String -> Flags -> IO [addrt] resolveReverse :: addrt -> Flags -> IO [String] instance Resolver IPv4Address where ... -- And the same for the rest type Service = String -- or would Word16 be better? class Connect addr where connectStream :: addrt -> Service -> IO Socket connectDgram :: addrt -> Service -> IO Socket sendDGramString :: addrt -> Service -> String -> IO () - Einar Karttunen