Network.Socket.PortNum should not be exported
Network.Socket exports a PortNum value constructor. Though there's no haddock documentation to say so, this constructs a value of type PortNumber by taking a Word16 in *machine* order, i.e., byte-swapped on little-endian machines.
However, PortNumber is an instance of Num and has a fromIntegral (that converts from a non-byte-swapped int), so when specifying a PortNumber for a something such as a SockAddrInet, one should just use an Integral. That is, instead of
SockAddrInet (PortNum $ fromIntegral (byteswap 12345)) hostaddr
one should just use
SockAddrInet 12345 hostaddr
I think that the PortNum constructor should not be exported; it's difficult to use due to the lack of documentation (and its own nature, really), is not necessary, and worst of all, its existence has mislead at least two programmers I know of to use it when they didn't want or need to.
Trac metadata
Trac field | Value |
---|---|
Version | 6.8.3 |
Type | Bug |
TypeOfFailure | OtherFailure |
Priority | normal |
Resolution | Unresolved |
Component | Compiler |
Test case | |
Differential revisions | |
BlockedBy | |
Related | |
Blocking | |
CC | |
Operating system | Multiple |
Architecture | Multiple |